From d94d771febb198a573ee9b1f7df2e6e6959be281 Mon Sep 17 00:00:00 2001 From: Ali <> Date: Fri, 2 Oct 2020 17:14:59 +0100 Subject: [PATCH] Comments [WIP] --- .../Telegram-iOS/en.lproj/Localizable.strings | 2 + .../Sources/AnimatedCountLabelNode.swift | 79 +- submodules/AppLock/Sources/AppLock.swift | 2 - submodules/MtProtoKit/Sources/MTContext.m | 5 +- .../Sources/MTDatacenterAuthMessageService.m | 9 + .../Sources/ReplyThreadHistory.swift | 25 +- .../Sources/PresentationStrings.swift | 1747 +++++++++-------- .../Resources/PresentationStrings.mapping | Bin 156903 -> 156951 bytes .../TelegramUI/Sources/ChatController.swift | 15 +- .../Sources/ChatControllerNode.swift | 40 + .../Sources/ChatHistoryEntriesForView.swift | 2 +- .../Sources/ChatHistoryListNode.swift | 12 +- .../ChatInterfaceStateContextMenus.swift | 2 +- .../ChatMessageAnimatedStickerItemNode.swift | 12 +- .../Sources/ChatMessageBubbleItemNode.swift | 9 +- .../ChatMessageInstantVideoItemNode.swift | 6 +- .../ChatMessageInteractiveFileNode.swift | 6 +- .../TelegramUI/Sources/ChatMessageItem.swift | 2 +- .../Sources/ChatMessageStickerItemNode.swift | 6 +- .../TelegramUI/Sources/ChatTitleView.swift | 7 +- submodules/TgVoipWebrtc/tgcalls | 2 +- .../WalletUI/Resources/WalletStrings.mapping | Bin 8422 -> 8422 bytes .../WalletUI/Sources/WalletStrings.swift | 4 +- 23 files changed, 1075 insertions(+), 919 deletions(-) diff --git a/Telegram/Telegram-iOS/en.lproj/Localizable.strings b/Telegram/Telegram-iOS/en.lproj/Localizable.strings index 6b88380a9d..337a3fdeb7 100644 --- a/Telegram/Telegram-iOS/en.lproj/Localizable.strings +++ b/Telegram/Telegram-iOS/en.lproj/Localizable.strings @@ -5813,3 +5813,5 @@ Any member of this group will be able to see messages in the channel."; "Channel.CommentsGroup.HeaderGroupSet" = "%@ is linking the group as it's discussion board."; "RepliesChat.DescriptionText" = "This chat helps you keep track of replies to your comments in Channels."; + +"Channel.DiscussionMessageUnavailable" = "Sorry, this post has been removed from the discussion group."; diff --git a/submodules/AnimatedCountLabelNode/Sources/AnimatedCountLabelNode.swift b/submodules/AnimatedCountLabelNode/Sources/AnimatedCountLabelNode.swift index 96862e70f1..ecd7fb8d6d 100644 --- a/submodules/AnimatedCountLabelNode/Sources/AnimatedCountLabelNode.swift +++ b/submodules/AnimatedCountLabelNode/Sources/AnimatedCountLabelNode.swift @@ -10,11 +10,6 @@ public class AnimatedCountLabelNode: ASDisplayNode { } public enum Segment: Equatable { - public enum Key: Hashable { - case number - case text(Int) - } - case number(Int, NSAttributedString) case text(Int, NSAttributedString) @@ -34,10 +29,37 @@ public class AnimatedCountLabelNode: ASDisplayNode { } } } + } + + fileprivate enum ResolvedSegment: Equatable { + public enum Key: Hashable { + case number(Int) + case text(Int) + } + + case number(id: Int, value: Int, string: NSAttributedString) + case text(id: Int, string: NSAttributedString) + + public static func ==(lhs: ResolvedSegment, rhs: ResolvedSegment) -> Bool { + switch lhs { + case let .number(id, number, text): + if case let .number(rhsId, rhsNumber, rhsText) = rhs, id == rhsId, number == rhsNumber, text.isEqual(to: rhsText) { + return true + } else { + return false + } + case let .text(index, text): + if case let .text(rhsIndex, rhsText) = rhs, index == rhsIndex, text.isEqual(to: rhsText) { + return true + } else { + return false + } + } + } public var attributedText: NSAttributedString { switch self { - case let .number(_, text): + case let .number(_, _, text): return text case let .text(_, text): return text @@ -46,28 +68,53 @@ public class AnimatedCountLabelNode: ASDisplayNode { var key: Key { switch self { - case .number: - return .number + case let .number(id, _, _): + return .number(id) case let .text(index, _): return .text(index) } } } - fileprivate var resolvedSegments: [Segment.Key: (Segment, TextNode)] = [:] + fileprivate var resolvedSegments: [ResolvedSegment.Key: (ResolvedSegment, TextNode)] = [:] override public init() { super.init() } public func asyncLayout() -> (CGSize, [Segment]) -> (Layout, (Bool) -> Void) { - var segmentLayouts: [Segment.Key: (TextNodeLayoutArguments) -> (TextNodeLayout, () -> TextNode)] = [:] + var segmentLayouts: [ResolvedSegment.Key: (TextNodeLayoutArguments) -> (TextNodeLayout, () -> TextNode)] = [:] let wasEmpty = self.resolvedSegments.isEmpty for (segmentKey, segmentAndTextNode) in self.resolvedSegments { segmentLayouts[segmentKey] = TextNode.asyncLayout(segmentAndTextNode.1) } - return { [weak self] size, segments in + return { [weak self] size, initialSegments in + var segments: [ResolvedSegment] = [] + loop: for segment in initialSegments { + switch segment { + case let .number(value, string): + if string.string.isEmpty { + continue loop + } + let attributes = string.attributes(at: 0, longestEffectiveRange: nil, in: NSRange(location: 0, length: 1)) + + var remainingValue = value + + while true { + let digitValue = remainingValue % 10 + + segments.insert(.number(id: 1000 - segments.count, value: value, string: NSAttributedString(string: "\(digitValue)", attributes: attributes)), at: 0) + remainingValue /= 10 + if remainingValue == 0 { + break + } + } + case let .text(id, string): + segments.append(.text(id: id, string: string)) + } + } + for segment in segments { if segmentLayouts[segment.key] == nil { segmentLayouts[segment.key] = TextNode.asyncLayout(nil) @@ -77,17 +124,17 @@ public class AnimatedCountLabelNode: ASDisplayNode { var contentSize = CGSize() var remainingSize = size - var calculatedSegments: [Segment.Key: (TextNodeLayout, CGFloat, () -> TextNode)] = [:] + var calculatedSegments: [ResolvedSegment.Key: (TextNodeLayout, CGFloat, () -> TextNode)] = [:] var isTruncated = false - var validKeys: [Segment.Key] = [] + var validKeys: [ResolvedSegment.Key] = [] for segment in segments { validKeys.append(segment.key) let (layout, apply) = segmentLayouts[segment.key]!(TextNodeLayoutArguments(attributedString: segment.attributedText, backgroundColor: nil, maximumNumberOfLines: 1, truncationType: .end, constrainedSize: remainingSize, alignment: .left, lineSpacing: 0.0, cutout: nil, insets: UIEdgeInsets(), lineColor: nil, textShadowColor: nil, textStroke: nil)) var effectiveSegmentWidth = layout.size.width if case .number = segment { - effectiveSegmentWidth = ceil(effectiveSegmentWidth / 2.0) * 2.0 + //effectiveSegmentWidth = ceil(effectiveSegmentWidth / 2.0) * 2.0 } else if segment.attributedText.string == " " { effectiveSegmentWidth = max(effectiveSegmentWidth, 4.0) } @@ -115,7 +162,7 @@ public class AnimatedCountLabelNode: ASDisplayNode { for segment in segments { var animation: (CGFloat, Double)? if let (currentSegment, currentTextNode) = strongSelf.resolvedSegments[segment.key] { - if case let .number(currentValue, _) = currentSegment, case let .number(updatedValue, _) = segment, animated, !wasEmpty, currentValue != updatedValue, let snapshot = currentTextNode.layer.snapshotContentTree() { + if case let .number(_, currentValue, currentString) = currentSegment, case let .number(_, updatedValue, updatedString) = segment, animated, !wasEmpty, currentValue != updatedValue, currentString.string != updatedString.string, let snapshot = currentTextNode.layer.snapshotContentTree() { let offsetY: CGFloat if currentValue > updatedValue { offsetY = -floor(currentTextNode.bounds.height * 0.6) @@ -164,7 +211,7 @@ public class AnimatedCountLabelNode: ASDisplayNode { strongSelf.resolvedSegments[segment.key] = (segment, textNode) } - var removeKeys: [Segment.Key] = [] + var removeKeys: [ResolvedSegment.Key] = [] for key in strongSelf.resolvedSegments.keys { if !validKeys.contains(key) { removeKeys.append(key) diff --git a/submodules/AppLock/Sources/AppLock.swift b/submodules/AppLock/Sources/AppLock.swift index 112873aac4..b771fc82de 100644 --- a/submodules/AppLock/Sources/AppLock.swift +++ b/submodules/AppLock/Sources/AppLock.swift @@ -37,8 +37,6 @@ private func isLocked(passcodeSettings: PresentationPasscodeSettings, state: Loc } private func getCoveringViewSnaphot(window: Window1) -> UIImage? { - print("getCoveringViewSnaphot") - let scale: CGFloat = 0.5 let unscaledSize = window.hostView.containerView.frame.size return generateImage(CGSize(width: floor(unscaledSize.width * scale), height: floor(unscaledSize.height * scale)), rotatedContext: { size, context in diff --git a/submodules/MtProtoKit/Sources/MTContext.m b/submodules/MtProtoKit/Sources/MTContext.m index cbe6a136bd..e84716e92a 100644 --- a/submodules/MtProtoKit/Sources/MTContext.m +++ b/submodules/MtProtoKit/Sources/MTContext.m @@ -229,6 +229,7 @@ static int32_t fixedTimeDifferenceValue = 0; _useTempAuthKeys = useTempAuthKeys; #if DEBUG _tempKeyExpiration = 1 * 60 * 60; + _tempKeyExpiration = 5; #else _tempKeyExpiration = 24 * 60 * 60; #endif @@ -380,12 +381,12 @@ static int32_t fixedTimeDifferenceValue = 0; if (datacenterAuthInfoById != nil) { _datacenterAuthInfoById = [[NSMutableDictionary alloc] initWithDictionary:datacenterAuthInfoById]; #if DEBUG - /*NSArray *keys = [_datacenterAuthInfoById allKeys]; + NSArray *keys = [_datacenterAuthInfoById allKeys]; for (NSNumber *key in keys) { if (parseAuthInfoMapKeyInteger(key).selector != MTDatacenterAuthInfoSelectorPersistent) { [_datacenterAuthInfoById removeObjectForKey:key]; } - }*/ + } #endif } diff --git a/submodules/MtProtoKit/Sources/MTDatacenterAuthMessageService.m b/submodules/MtProtoKit/Sources/MTDatacenterAuthMessageService.m index e9d94c678b..22aaf5d07d 100644 --- a/submodules/MtProtoKit/Sources/MTDatacenterAuthMessageService.m +++ b/submodules/MtProtoKit/Sources/MTDatacenterAuthMessageService.m @@ -402,7 +402,13 @@ typedef enum { arc4random_buf(&random, 1); [dataWithHash appendBytes:&random length:1]; } + #if DEBUG + assert(dataWithHash.length == 255); + #endif NSData *encryptedData = MTRsaEncrypt(_encryptionProvider, [publicKey objectForKey:@"key"], dataWithHash); + if (MTLogEnabled()) { + MTLog(@"[MTDatacenterAuthMessageService#%p encryptedData.length = %d]", self, encryptedData.length); + } if (encryptedData.length < 256) { NSMutableData *newEncryptedData = [[NSMutableData alloc] init]; @@ -415,6 +421,9 @@ typedef enum { [newEncryptedData appendData:encryptedData]; encryptedData = newEncryptedData; } + #if DEBUG + assert(encryptedData.length == 256); + #endif _dhEncryptedData = encryptedData; } else { diff --git a/submodules/TelegramCore/Sources/ReplyThreadHistory.swift b/submodules/TelegramCore/Sources/ReplyThreadHistory.swift index 477b4d7652..d35538ba1f 100644 --- a/submodules/TelegramCore/Sources/ReplyThreadHistory.swift +++ b/submodules/TelegramCore/Sources/ReplyThreadHistory.swift @@ -6,6 +6,7 @@ import TelegramApi private struct DiscussionMessage { public var messageId: MessageId + public var channelMessageId: MessageId? public var isChannelPost: Bool public var maxMessage: MessageId? public var maxReadIncomingMessageId: MessageId? @@ -143,6 +144,14 @@ private class ReplyThreadHistoryContextImpl { return .fail(.generic) } + var channelMessageId: MessageId? + for attribute in topMessage.attributes { + if let attribute = attribute as? SourceReferenceMessageAttribute { + channelMessageId = attribute.messageId + break + } + } + var peers: [Peer] = [] var peerPresences: [PeerId: PeerPresence] = [:] @@ -188,6 +197,7 @@ private class ReplyThreadHistoryContextImpl { return .single(DiscussionMessage( messageId: parsedIndex.id, + channelMessageId: channelMessageId, isChannelPost: isChannelPost, maxMessage: resolvedMaxMessage, maxReadIncomingMessageId: readInboxMaxId.flatMap { readMaxId in @@ -388,6 +398,7 @@ public struct ChatReplyThreadMessage: Equatable { } public var messageId: MessageId + public var channelMessageId: MessageId? public var isChannelPost: Bool public var maxMessage: MessageId? public var maxReadIncomingMessageId: MessageId? @@ -396,8 +407,9 @@ public struct ChatReplyThreadMessage: Equatable { public var initialAnchor: Anchor public var isNotAvailable: Bool - fileprivate init(messageId: MessageId, isChannelPost: Bool, maxMessage: MessageId?, maxReadIncomingMessageId: MessageId?, maxReadOutgoingMessageId: MessageId?, initialFilledHoles: IndexSet, initialAnchor: Anchor, isNotAvailable: Bool) { + fileprivate init(messageId: MessageId, channelMessageId: MessageId?, isChannelPost: Bool, maxMessage: MessageId?, maxReadIncomingMessageId: MessageId?, maxReadOutgoingMessageId: MessageId?, initialFilledHoles: IndexSet, initialAnchor: Anchor, isNotAvailable: Bool) { self.messageId = messageId + self.channelMessageId = channelMessageId self.isChannelPost = isChannelPost self.maxMessage = maxMessage self.maxReadIncomingMessageId = maxReadIncomingMessageId @@ -445,6 +457,14 @@ public func fetchChannelReplyThreadMessage(account: Account, messageId: MessageI return nil } + var channelMessageId: MessageId? + for attribute in topMessage.attributes { + if let attribute = attribute as? SourceReferenceMessageAttribute { + channelMessageId = attribute.messageId + break + } + } + var peers: [Peer] = [] var peerPresences: [PeerId: PeerPresence] = [:] @@ -490,6 +510,7 @@ public func fetchChannelReplyThreadMessage(account: Account, messageId: MessageI return DiscussionMessage( messageId: parsedIndex.id, + channelMessageId: channelMessageId, isChannelPost: isChannelPost, maxMessage: resolvedMaxMessage, maxReadIncomingMessageId: readInboxMaxId.flatMap { readMaxId in @@ -530,6 +551,7 @@ public func fetchChannelReplyThreadMessage(account: Account, messageId: MessageI return DiscussionMessage( messageId: discussionMessageId, + channelMessageId: messageId, isChannelPost: true, maxMessage: replyInfo.maxMessageId, maxReadIncomingMessageId: replyInfo.maxReadIncomingMessageId, @@ -730,6 +752,7 @@ public func fetchChannelReplyThreadMessage(account: Account, messageId: MessageI return .single(ChatReplyThreadMessage( messageId: discussionMessage.messageId, + channelMessageId: discussionMessage.channelMessageId, isChannelPost: discussionMessage.isChannelPost, maxMessage: discussionMessage.maxMessage, maxReadIncomingMessageId: discussionMessage.maxReadIncomingMessageId, diff --git a/submodules/TelegramPresentationData/Sources/PresentationStrings.swift b/submodules/TelegramPresentationData/Sources/PresentationStrings.swift index 429101fc0a..c34a0efba7 100644 --- a/submodules/TelegramPresentationData/Sources/PresentationStrings.swift +++ b/submodules/TelegramPresentationData/Sources/PresentationStrings.swift @@ -4742,1040 +4742,1041 @@ public final class PresentationStrings: Equatable { public func Wallet_Time_PreciseDate_m4(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { return formatWithArgumentRanges(self._s[4280]!, self._r[4280]!, [_1, _2, _3]) } - public var GroupInfo_ActionPromote: String { return self._s[4281]! } - public var Group_OwnershipTransfer_ErrorLocatedGroupsTooMuch: String { return self._s[4282]! } + public var Channel_DiscussionMessageUnavailable: String { return self._s[4281]! } + public var GroupInfo_ActionPromote: String { return self._s[4282]! } + public var Group_OwnershipTransfer_ErrorLocatedGroupsTooMuch: String { return self._s[4283]! } public func TwoStepAuth_PendingEmailHelp(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4283]!, self._r[4283]!, [_0]) + return formatWithArgumentRanges(self._s[4284]!, self._r[4284]!, [_0]) } - public var VoiceOver_Chat_Reply: String { return self._s[4284]! } - public var Month_GenMay: String { return self._s[4285]! } - public var DialogList_DeleteBotConversationConfirmation: String { return self._s[4286]! } - public var Chat_PsaTooltip_covid: String { return self._s[4287]! } - public var Watch_Suggestion_CantTalk: String { return self._s[4288]! } - public var Privacy_GroupsAndChannels_NeverAllow_Title: String { return self._s[4289]! } - public var AppUpgrade_Running: String { return self._s[4290]! } - public var PasscodeSettings_UnlockWithFaceId: String { return self._s[4293]! } - public var Notification_Exceptions_PreviewAlwaysOff: String { return self._s[4294]! } - public var SharedMedia_EmptyText: String { return self._s[4295]! } - public var Passport_Address_EditResidentialAddress: String { return self._s[4296]! } - public var SettingsSearch_Synonyms_Notifications_GroupNotificationsAlert: String { return self._s[4297]! } - public var Message_PinnedGame: String { return self._s[4298]! } - public var KeyCommand_SearchInChat: String { return self._s[4299]! } - public var Appearance_ThemeCarouselNewNight: String { return self._s[4300]! } - public var ChatList_Search_FilterMedia: String { return self._s[4301]! } - public var Message_PinnedAudioMessage: String { return self._s[4302]! } - public var ChannelInfo_ConfirmLeave: String { return self._s[4303]! } + public var VoiceOver_Chat_Reply: String { return self._s[4285]! } + public var Month_GenMay: String { return self._s[4286]! } + public var DialogList_DeleteBotConversationConfirmation: String { return self._s[4287]! } + public var Chat_PsaTooltip_covid: String { return self._s[4288]! } + public var Watch_Suggestion_CantTalk: String { return self._s[4289]! } + public var Privacy_GroupsAndChannels_NeverAllow_Title: String { return self._s[4290]! } + public var AppUpgrade_Running: String { return self._s[4291]! } + public var PasscodeSettings_UnlockWithFaceId: String { return self._s[4294]! } + public var Notification_Exceptions_PreviewAlwaysOff: String { return self._s[4295]! } + public var SharedMedia_EmptyText: String { return self._s[4296]! } + public var Passport_Address_EditResidentialAddress: String { return self._s[4297]! } + public var SettingsSearch_Synonyms_Notifications_GroupNotificationsAlert: String { return self._s[4298]! } + public var Message_PinnedGame: String { return self._s[4299]! } + public var KeyCommand_SearchInChat: String { return self._s[4300]! } + public var Appearance_ThemeCarouselNewNight: String { return self._s[4301]! } + public var ChatList_Search_FilterMedia: String { return self._s[4302]! } + public var Message_PinnedAudioMessage: String { return self._s[4303]! } + public var ChannelInfo_ConfirmLeave: String { return self._s[4304]! } public func Channel_AdminLog_MessagePromotedNameUsername(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4304]!, self._r[4304]!, [_1, _2]) + return formatWithArgumentRanges(self._s[4305]!, self._r[4305]!, [_1, _2]) } - public var SocksProxySetup_ProxyStatusUnavailable: String { return self._s[4305]! } + public var SocksProxySetup_ProxyStatusUnavailable: String { return self._s[4306]! } public func Passport_Email_CodeHelp(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4306]!, self._r[4306]!, [_0]) + return formatWithArgumentRanges(self._s[4307]!, self._r[4307]!, [_0]) } - public var Wallet_Receive_AddressCopied: String { return self._s[4307]! } + public var Wallet_Receive_AddressCopied: String { return self._s[4308]! } public func Message_PinnedTextMessage(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4308]!, self._r[4308]!, [_0]) + return formatWithArgumentRanges(self._s[4309]!, self._r[4309]!, [_0]) } - public var Settings_AddAccount: String { return self._s[4309]! } - public var Channel_AdminLog_CanDeleteMessages: String { return self._s[4310]! } - public var Conversation_DiscardVoiceMessageTitle: String { return self._s[4311]! } - public var Channel_JoinChannel: String { return self._s[4312]! } - public var Watch_UserInfo_Unblock: String { return self._s[4313]! } - public var PhoneLabel_Title: String { return self._s[4314]! } - public var Group_Setup_HistoryHiddenHelp: String { return self._s[4316]! } - public var Privacy_ProfilePhoto_AlwaysShareWith_Title: String { return self._s[4317]! } + public var Settings_AddAccount: String { return self._s[4310]! } + public var Channel_AdminLog_CanDeleteMessages: String { return self._s[4311]! } + public var Conversation_DiscardVoiceMessageTitle: String { return self._s[4312]! } + public var Channel_JoinChannel: String { return self._s[4313]! } + public var Watch_UserInfo_Unblock: String { return self._s[4314]! } + public var PhoneLabel_Title: String { return self._s[4315]! } + public var Group_Setup_HistoryHiddenHelp: String { return self._s[4317]! } + public var Privacy_ProfilePhoto_AlwaysShareWith_Title: String { return self._s[4318]! } public func Login_PhoneGenericEmailBody(_ _1: String, _ _2: String, _ _3: String, _ _4: String, _ _5: String, _ _6: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4318]!, self._r[4318]!, [_1, _2, _3, _4, _5, _6]) + return formatWithArgumentRanges(self._s[4319]!, self._r[4319]!, [_1, _2, _3, _4, _5, _6]) } - public var Wallet_Month_GenOctober: String { return self._s[4319]! } - public var Channel_AddBotErrorHaveRights: String { return self._s[4320]! } - public var ChatList_TabIconFoldersTooltipNonEmptyFolders: String { return self._s[4321]! } - public var DialogList_EncryptionProcessing: String { return self._s[4322]! } - public var ChatList_Search_FilterChats: String { return self._s[4323]! } - public var WatchRemote_NotificationText: String { return self._s[4324]! } - public var EditTheme_ChangeColors: String { return self._s[4325]! } - public var GroupRemoved_ViewUserInfo: String { return self._s[4326]! } - public var Wallet_TransactionInfo_RecipientHeader: String { return self._s[4327]! } - public var CallSettings_OnMobile: String { return self._s[4329]! } - public var Month_ShortFebruary: String { return self._s[4331]! } - public var VoiceOver_MessageContextReply: String { return self._s[4332]! } + public var Wallet_Month_GenOctober: String { return self._s[4320]! } + public var Channel_AddBotErrorHaveRights: String { return self._s[4321]! } + public var ChatList_TabIconFoldersTooltipNonEmptyFolders: String { return self._s[4322]! } + public var DialogList_EncryptionProcessing: String { return self._s[4323]! } + public var ChatList_Search_FilterChats: String { return self._s[4324]! } + public var WatchRemote_NotificationText: String { return self._s[4325]! } + public var EditTheme_ChangeColors: String { return self._s[4326]! } + public var GroupRemoved_ViewUserInfo: String { return self._s[4327]! } + public var Wallet_TransactionInfo_RecipientHeader: String { return self._s[4328]! } + public var CallSettings_OnMobile: String { return self._s[4330]! } + public var Month_ShortFebruary: String { return self._s[4332]! } + public var VoiceOver_MessageContextReply: String { return self._s[4333]! } public func PUSH_VIDEO_CALL_REQUEST(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4333]!, self._r[4333]!, [_1]) + return formatWithArgumentRanges(self._s[4334]!, self._r[4334]!, [_1]) } - public var Group_Location_ChangeLocation: String { return self._s[4334]! } - public var Passport_Address_TypeBankStatementUploadScan: String { return self._s[4335]! } - public var Wallet_Send_EncryptComment: String { return self._s[4336]! } - public var VoiceOver_Media_PlaybackStop: String { return self._s[4337]! } - public var SettingsSearch_Synonyms_Data_SaveIncomingPhotos: String { return self._s[4338]! } + public var Group_Location_ChangeLocation: String { return self._s[4335]! } + public var Passport_Address_TypeBankStatementUploadScan: String { return self._s[4336]! } + public var Wallet_Send_EncryptComment: String { return self._s[4337]! } + public var VoiceOver_Media_PlaybackStop: String { return self._s[4338]! } + public var SettingsSearch_Synonyms_Data_SaveIncomingPhotos: String { return self._s[4339]! } public func Channel_AdminLog_MessageRestrictedUntil(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4340]!, self._r[4340]!, [_0]) + return formatWithArgumentRanges(self._s[4341]!, self._r[4341]!, [_0]) } - public var PhotoEditor_WarmthTool: String { return self._s[4341]! } - public var Login_InfoAvatarPhoto: String { return self._s[4342]! } - public var Notification_Exceptions_NewException_MessagePreviewHeader: String { return self._s[4343]! } - public var Permissions_CellularDataAllowInSettings_v0: String { return self._s[4344]! } - public var Map_PlacesInThisArea: String { return self._s[4345]! } - public var VoiceOver_Chat_ContactEmail: String { return self._s[4346]! } - public var Notifications_InAppNotificationsSounds: String { return self._s[4347]! } + public var PhotoEditor_WarmthTool: String { return self._s[4342]! } + public var Login_InfoAvatarPhoto: String { return self._s[4343]! } + public var Notification_Exceptions_NewException_MessagePreviewHeader: String { return self._s[4344]! } + public var Permissions_CellularDataAllowInSettings_v0: String { return self._s[4345]! } + public var Map_PlacesInThisArea: String { return self._s[4346]! } + public var VoiceOver_Chat_ContactEmail: String { return self._s[4347]! } + public var Notifications_InAppNotificationsSounds: String { return self._s[4348]! } public func PUSH_PINNED_NOTEXT(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4348]!, self._r[4348]!, [_1]) + return formatWithArgumentRanges(self._s[4349]!, self._r[4349]!, [_1]) } - public var ShareMenu_Send: String { return self._s[4349]! } - public var Username_InvalidStartsWithNumber: String { return self._s[4350]! } - public var Appearance_AppIconClassicX: String { return self._s[4351]! } + public var ShareMenu_Send: String { return self._s[4350]! } + public var Username_InvalidStartsWithNumber: String { return self._s[4351]! } + public var Appearance_AppIconClassicX: String { return self._s[4352]! } public func PUSH_CHANNEL_MESSAGE_ROUND(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4352]!, self._r[4352]!, [_1]) + return formatWithArgumentRanges(self._s[4353]!, self._r[4353]!, [_1]) } - public var Conversation_StopPoll: String { return self._s[4353]! } - public var InfoPlist_NSLocationAlwaysUsageDescription: String { return self._s[4355]! } - public var Passport_Identity_EditIdentityCard: String { return self._s[4356]! } - public var Appearance_ThemePreview_ChatList_3_Name: String { return self._s[4357]! } - public var Wallet_WordCheck_Title: String { return self._s[4358]! } - public var Conversation_Timer_Title: String { return self._s[4359]! } - public var Common_Next: String { return self._s[4360]! } - public var Notification_Exceptions_NewException: String { return self._s[4361]! } + public var Conversation_StopPoll: String { return self._s[4354]! } + public var InfoPlist_NSLocationAlwaysUsageDescription: String { return self._s[4356]! } + public var Passport_Identity_EditIdentityCard: String { return self._s[4357]! } + public var Appearance_ThemePreview_ChatList_3_Name: String { return self._s[4358]! } + public var Wallet_WordCheck_Title: String { return self._s[4359]! } + public var Conversation_Timer_Title: String { return self._s[4360]! } + public var Common_Next: String { return self._s[4361]! } + public var Notification_Exceptions_NewException: String { return self._s[4362]! } public func Generic_OpenHiddenLinkAlert(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4362]!, self._r[4362]!, [_0]) + return formatWithArgumentRanges(self._s[4363]!, self._r[4363]!, [_0]) } - public var AccessDenied_CallMicrophone: String { return self._s[4363]! } - public var SettingsSearch_Synonyms_Data_AutoDownloadUsingCellular: String { return self._s[4364]! } - public var ChangePhoneNumberCode_Help: String { return self._s[4365]! } - public var Passport_Identity_OneOfTypeIdentityCard: String { return self._s[4366]! } - public var Channel_AdminLogFilter_EventsLeaving: String { return self._s[4367]! } - public var BlockedUsers_LeavePrefix: String { return self._s[4368]! } + public var AccessDenied_CallMicrophone: String { return self._s[4364]! } + public var SettingsSearch_Synonyms_Data_AutoDownloadUsingCellular: String { return self._s[4365]! } + public var ChangePhoneNumberCode_Help: String { return self._s[4366]! } + public var Passport_Identity_OneOfTypeIdentityCard: String { return self._s[4367]! } + public var Channel_AdminLogFilter_EventsLeaving: String { return self._s[4368]! } + public var BlockedUsers_LeavePrefix: String { return self._s[4369]! } public func Passport_RequestHeader(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4369]!, self._r[4369]!, [_0]) + return formatWithArgumentRanges(self._s[4370]!, self._r[4370]!, [_0]) } - public var Group_About_Help: String { return self._s[4370]! } - public var TwoStepAuth_ChangePasswordDescription: String { return self._s[4371]! } - public var Tour_Title3: String { return self._s[4372]! } - public var Watch_Conversation_Unblock: String { return self._s[4373]! } - public var Watch_UserInfo_Block: String { return self._s[4374]! } - public var Notifications_ChannelNotificationsAlert: String { return self._s[4375]! } - public var TwoFactorSetup_Hint_Action: String { return self._s[4376]! } - public var IntentsSettings_SuggestedChatsInfo: String { return self._s[4377]! } - public var Wallet_Alert_Cancel: String { return self._s[4378]! } - public var TextFormat_AddLinkTitle: String { return self._s[4379]! } - public var GroupInfo_InviteLink_RevokeAlert_Revoke: String { return self._s[4380]! } - public var TwoStepAuth_EnterPasswordTitle: String { return self._s[4381]! } - public var FastTwoStepSetup_PasswordSection: String { return self._s[4382]! } - public var Compose_ChannelMembers: String { return self._s[4383]! } - public var Conversation_ForwardTitle: String { return self._s[4384]! } + public var Group_About_Help: String { return self._s[4371]! } + public var TwoStepAuth_ChangePasswordDescription: String { return self._s[4372]! } + public var Tour_Title3: String { return self._s[4373]! } + public var Watch_Conversation_Unblock: String { return self._s[4374]! } + public var Watch_UserInfo_Block: String { return self._s[4375]! } + public var Notifications_ChannelNotificationsAlert: String { return self._s[4376]! } + public var TwoFactorSetup_Hint_Action: String { return self._s[4377]! } + public var IntentsSettings_SuggestedChatsInfo: String { return self._s[4378]! } + public var Wallet_Alert_Cancel: String { return self._s[4379]! } + public var TextFormat_AddLinkTitle: String { return self._s[4380]! } + public var GroupInfo_InviteLink_RevokeAlert_Revoke: String { return self._s[4381]! } + public var TwoStepAuth_EnterPasswordTitle: String { return self._s[4382]! } + public var FastTwoStepSetup_PasswordSection: String { return self._s[4383]! } + public var Compose_ChannelMembers: String { return self._s[4384]! } + public var Conversation_ForwardTitle: String { return self._s[4385]! } public func Wallet_Updated_AtDate(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4385]!, self._r[4385]!, [_0]) + return formatWithArgumentRanges(self._s[4386]!, self._r[4386]!, [_0]) } - public var Conversation_PinnedPoll: String { return self._s[4387]! } + public var Conversation_PinnedPoll: String { return self._s[4388]! } public func VoiceOver_Chat_AnonymousPollFrom(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4388]!, self._r[4388]!, [_0]) + return formatWithArgumentRanges(self._s[4389]!, self._r[4389]!, [_0]) } - public var SettingsSearch_Synonyms_EditProfile_AddAccount: String { return self._s[4389]! } - public var Conversation_ContextMenuStickerPackAdd: String { return self._s[4390]! } - public var Stats_Overview: String { return self._s[4391]! } - public var Map_HomeAndWorkTitle: String { return self._s[4392]! } - public var Wallet_Intro_Terms: String { return self._s[4393]! } + public var SettingsSearch_Synonyms_EditProfile_AddAccount: String { return self._s[4390]! } + public var Conversation_ContextMenuStickerPackAdd: String { return self._s[4391]! } + public var Stats_Overview: String { return self._s[4392]! } + public var Map_HomeAndWorkTitle: String { return self._s[4393]! } + public var Wallet_Intro_Terms: String { return self._s[4394]! } public func Time_PreciseDate_m4(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4394]!, self._r[4394]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[4395]!, self._r[4395]!, [_1, _2, _3]) } - public var Passport_Address_CityPlaceholder: String { return self._s[4395]! } - public var InfoPlist_NSLocationAlwaysAndWhenInUseUsageDescription: String { return self._s[4396]! } - public var Privacy_PhoneNumber: String { return self._s[4397]! } - public var ChatList_Search_FilterFiles: String { return self._s[4398]! } - public var ChatList_DeleteForEveryoneConfirmationAction: String { return self._s[4399]! } - public var ChannelIntro_CreateChannel: String { return self._s[4400]! } - public var Conversation_InputTextAnonymousPlaceholder: String { return self._s[4401]! } + public var Passport_Address_CityPlaceholder: String { return self._s[4396]! } + public var InfoPlist_NSLocationAlwaysAndWhenInUseUsageDescription: String { return self._s[4397]! } + public var Privacy_PhoneNumber: String { return self._s[4398]! } + public var ChatList_Search_FilterFiles: String { return self._s[4399]! } + public var ChatList_DeleteForEveryoneConfirmationAction: String { return self._s[4400]! } + public var ChannelIntro_CreateChannel: String { return self._s[4401]! } + public var Conversation_InputTextAnonymousPlaceholder: String { return self._s[4402]! } public func Login_EmailCodeBody(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4402]!, self._r[4402]!, [_0]) + return formatWithArgumentRanges(self._s[4403]!, self._r[4403]!, [_0]) } - public var Weekday_ShortMonday: String { return self._s[4403]! } - public var Passport_Language_ar: String { return self._s[4405]! } - public var SettingsSearch_Synonyms_EditProfile_Title: String { return self._s[4406]! } - public var TwoFactorSetup_Done_Title: String { return self._s[4407]! } - public var Calls_RatingFeedback: String { return self._s[4408]! } - public var SettingsSearch_Synonyms_Notifications_ChannelNotificationsPreview: String { return self._s[4409]! } - public var AutoDownloadSettings_ResetSettings: String { return self._s[4412]! } - public var Watch_Compose_Send: String { return self._s[4413]! } - public var PasscodeSettings_ChangePasscode: String { return self._s[4414]! } - public var WebSearch_RecentSectionClear: String { return self._s[4415]! } + public var Weekday_ShortMonday: String { return self._s[4404]! } + public var Passport_Language_ar: String { return self._s[4406]! } + public var SettingsSearch_Synonyms_EditProfile_Title: String { return self._s[4407]! } + public var TwoFactorSetup_Done_Title: String { return self._s[4408]! } + public var Calls_RatingFeedback: String { return self._s[4409]! } + public var SettingsSearch_Synonyms_Notifications_ChannelNotificationsPreview: String { return self._s[4410]! } + public var AutoDownloadSettings_ResetSettings: String { return self._s[4413]! } + public var Watch_Compose_Send: String { return self._s[4414]! } + public var PasscodeSettings_ChangePasscode: String { return self._s[4415]! } + public var WebSearch_RecentSectionClear: String { return self._s[4416]! } public func Contacts_AccessDeniedHelpPortrait(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4416]!, self._r[4416]!, [_0]) + return formatWithArgumentRanges(self._s[4417]!, self._r[4417]!, [_0]) } - public var WallpaperSearch_ColorTeal: String { return self._s[4417]! } - public var Wallpaper_SetCustomBackgroundInfo: String { return self._s[4418]! } - public var Permissions_ContactsTitle_v0: String { return self._s[4419]! } - public var Checkout_PasswordEntry_Pay: String { return self._s[4421]! } - public var Settings_SavedMessages: String { return self._s[4422]! } - public var TwoStepAuth_ReEnterPasswordDescription: String { return self._s[4423]! } - public var Month_ShortMarch: String { return self._s[4424]! } - public var Message_Location: String { return self._s[4425]! } + public var WallpaperSearch_ColorTeal: String { return self._s[4418]! } + public var Wallpaper_SetCustomBackgroundInfo: String { return self._s[4419]! } + public var Permissions_ContactsTitle_v0: String { return self._s[4420]! } + public var Checkout_PasswordEntry_Pay: String { return self._s[4422]! } + public var Settings_SavedMessages: String { return self._s[4423]! } + public var TwoStepAuth_ReEnterPasswordDescription: String { return self._s[4424]! } + public var Month_ShortMarch: String { return self._s[4425]! } + public var Message_Location: String { return self._s[4426]! } public func PUSH_MESSAGE_GIF(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4426]!, self._r[4426]!, [_1]) + return formatWithArgumentRanges(self._s[4427]!, self._r[4427]!, [_1]) } public func Notification_CallTimeFormat(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4427]!, self._r[4427]!, [_1, _2]) + return formatWithArgumentRanges(self._s[4428]!, self._r[4428]!, [_1, _2]) } - public var VoiceOver_Chat_VoiceMessage: String { return self._s[4429]! } + public var VoiceOver_Chat_VoiceMessage: String { return self._s[4430]! } public func Channel_AdminLog_MessageChangedUnlinkedChannel(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4430]!, self._r[4430]!, [_1, _2]) + return formatWithArgumentRanges(self._s[4431]!, self._r[4431]!, [_1, _2]) } - public var GroupPermission_NoSendMedia: String { return self._s[4431]! } - public var Conversation_ClousStorageInfo_Description2: String { return self._s[4432]! } - public var SharedMedia_CategoryDocs: String { return self._s[4433]! } - public var Appearance_RemoveThemeConfirmation: String { return self._s[4434]! } - public var Paint_Framed: String { return self._s[4435]! } - public var Channel_EditAdmin_PermissionAddAdmins: String { return self._s[4436]! } - public var Passport_Identity_DoesNotExpire: String { return self._s[4437]! } - public var Channel_SignMessages: String { return self._s[4438]! } - public var Contacts_AccessDeniedHelpON: String { return self._s[4439]! } - public var Conversation_ContextMenuStickerPackInfo: String { return self._s[4440]! } + public var GroupPermission_NoSendMedia: String { return self._s[4432]! } + public var Conversation_ClousStorageInfo_Description2: String { return self._s[4433]! } + public var SharedMedia_CategoryDocs: String { return self._s[4434]! } + public var Appearance_RemoveThemeConfirmation: String { return self._s[4435]! } + public var Paint_Framed: String { return self._s[4436]! } + public var Channel_EditAdmin_PermissionAddAdmins: String { return self._s[4437]! } + public var Passport_Identity_DoesNotExpire: String { return self._s[4438]! } + public var Channel_SignMessages: String { return self._s[4439]! } + public var Contacts_AccessDeniedHelpON: String { return self._s[4440]! } + public var Conversation_ContextMenuStickerPackInfo: String { return self._s[4441]! } public func PUSH_CHAT_LEFT(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4441]!, self._r[4441]!, [_1, _2]) + return formatWithArgumentRanges(self._s[4442]!, self._r[4442]!, [_1, _2]) } - public var GroupInfo_UpgradeButton: String { return self._s[4442]! } - public var Channel_EditAdmin_PermissionInviteMembers: String { return self._s[4443]! } - public var AutoDownloadSettings_Files: String { return self._s[4444]! } + public var GroupInfo_UpgradeButton: String { return self._s[4443]! } + public var Channel_EditAdmin_PermissionInviteMembers: String { return self._s[4444]! } + public var AutoDownloadSettings_Files: String { return self._s[4445]! } public func Notification_ChangedGroupName(_ _0: String, _ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4445]!, self._r[4445]!, [_0, _1]) + return formatWithArgumentRanges(self._s[4446]!, self._r[4446]!, [_0, _1]) } - public var Login_SendCodeViaSms: String { return self._s[4447]! } - public var Update_UpdateApp: String { return self._s[4448]! } - public var Channel_Setup_TypePublic: String { return self._s[4449]! } - public var Watch_Compose_CreateMessage: String { return self._s[4450]! } + public var Login_SendCodeViaSms: String { return self._s[4448]! } + public var Update_UpdateApp: String { return self._s[4449]! } + public var Channel_Setup_TypePublic: String { return self._s[4450]! } + public var Watch_Compose_CreateMessage: String { return self._s[4451]! } public func PUSH_CHAT_MESSAGE_VIDEOS(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4451]!, self._r[4451]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[4452]!, self._r[4452]!, [_1, _2, _3]) } - public var StickerPacksSettings_ManagingHelp: String { return self._s[4452]! } + public var StickerPacksSettings_ManagingHelp: String { return self._s[4453]! } public func Wallet_Time_PreciseDate_m12(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4453]!, self._r[4453]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[4454]!, self._r[4454]!, [_1, _2, _3]) } - public var VoiceOver_Chat_Video: String { return self._s[4454]! } - public var Forward_ChannelReadOnly: String { return self._s[4455]! } - public var StickerPack_HideStickers: String { return self._s[4456]! } - public var ChatListFolder_NameContacts: String { return self._s[4457]! } - public var Profile_BotInfo: String { return self._s[4458]! } - public var Document_TargetConfirmationFormat: String { return self._s[4459]! } - public var GroupInfo_InviteByLink: String { return self._s[4460]! } - public var Channel_AdminLog_BanSendStickersAndGifs: String { return self._s[4461]! } - public var Watch_Stickers_RecentPlaceholder: String { return self._s[4462]! } - public var Broadcast_AdminLog_EmptyText: String { return self._s[4463]! } - public var Passport_NotLoggedInMessage: String { return self._s[4464]! } - public var Conversation_StopQuizConfirmation: String { return self._s[4465]! } - public var Checkout_PaymentMethod: String { return self._s[4466]! } - public var ChatList_ArchivedChatsTitle: String { return self._s[4470]! } - public var TwoStepAuth_SetupPasswordConfirmFailed: String { return self._s[4471]! } - public var VoiceOver_Chat_RecordPreviewVoiceMessage: String { return self._s[4472]! } - public var PrivacyLastSeenSettings_GroupsAndChannelsHelp: String { return self._s[4473]! } - public var SettingsSearch_Synonyms_Privacy_Data_ContactsReset: String { return self._s[4474]! } - public var Camera_Title: String { return self._s[4475]! } - public var Map_Directions: String { return self._s[4476]! } - public var Wallet_Intro_ImportExisting: String { return self._s[4477]! } - public var Stats_MessagePublicForwardsTitle: String { return self._s[4478]! } - public var Privacy_ProfilePhoto_WhoCanSeeMyPhoto: String { return self._s[4480]! } - public var Profile_EncryptionKey: String { return self._s[4481]! } + public var VoiceOver_Chat_Video: String { return self._s[4455]! } + public var Forward_ChannelReadOnly: String { return self._s[4456]! } + public var StickerPack_HideStickers: String { return self._s[4457]! } + public var ChatListFolder_NameContacts: String { return self._s[4458]! } + public var Profile_BotInfo: String { return self._s[4459]! } + public var Document_TargetConfirmationFormat: String { return self._s[4460]! } + public var GroupInfo_InviteByLink: String { return self._s[4461]! } + public var Channel_AdminLog_BanSendStickersAndGifs: String { return self._s[4462]! } + public var Watch_Stickers_RecentPlaceholder: String { return self._s[4463]! } + public var Broadcast_AdminLog_EmptyText: String { return self._s[4464]! } + public var Passport_NotLoggedInMessage: String { return self._s[4465]! } + public var Conversation_StopQuizConfirmation: String { return self._s[4466]! } + public var Checkout_PaymentMethod: String { return self._s[4467]! } + public var ChatList_ArchivedChatsTitle: String { return self._s[4471]! } + public var TwoStepAuth_SetupPasswordConfirmFailed: String { return self._s[4472]! } + public var VoiceOver_Chat_RecordPreviewVoiceMessage: String { return self._s[4473]! } + public var PrivacyLastSeenSettings_GroupsAndChannelsHelp: String { return self._s[4474]! } + public var SettingsSearch_Synonyms_Privacy_Data_ContactsReset: String { return self._s[4475]! } + public var Camera_Title: String { return self._s[4476]! } + public var Map_Directions: String { return self._s[4477]! } + public var Wallet_Intro_ImportExisting: String { return self._s[4478]! } + public var Stats_MessagePublicForwardsTitle: String { return self._s[4479]! } + public var Privacy_ProfilePhoto_WhoCanSeeMyPhoto: String { return self._s[4481]! } + public var Profile_EncryptionKey: String { return self._s[4482]! } public func LOCAL_CHAT_MESSAGE_FWDS(_ _1: String, _ _2: Int) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4482]!, self._r[4482]!, [_1, "\(_2)"]) + return formatWithArgumentRanges(self._s[4483]!, self._r[4483]!, [_1, "\(_2)"]) } public func Compatibility_SecretMediaVersionTooLow(_ _0: String, _ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4483]!, self._r[4483]!, [_0, _1]) + return formatWithArgumentRanges(self._s[4484]!, self._r[4484]!, [_0, _1]) } - public var Passport_Identity_TypePassport: String { return self._s[4484]! } - public var CreatePoll_QuizOptionsHeader: String { return self._s[4486]! } - public var Common_No: String { return self._s[4487]! } - public var Conversation_SendMessage_ScheduleMessage: String { return self._s[4488]! } - public var SettingsSearch_Synonyms_Privacy_LastSeen: String { return self._s[4489]! } - public var Settings_AboutEmpty: String { return self._s[4490]! } - public var TwoStepAuth_FloodError: String { return self._s[4492]! } - public var SettingsSearch_Synonyms_Appearance_TextSize: String { return self._s[4493]! } + public var Passport_Identity_TypePassport: String { return self._s[4485]! } + public var CreatePoll_QuizOptionsHeader: String { return self._s[4487]! } + public var Common_No: String { return self._s[4488]! } + public var Conversation_SendMessage_ScheduleMessage: String { return self._s[4489]! } + public var SettingsSearch_Synonyms_Privacy_LastSeen: String { return self._s[4490]! } + public var Settings_AboutEmpty: String { return self._s[4491]! } + public var TwoStepAuth_FloodError: String { return self._s[4493]! } + public var SettingsSearch_Synonyms_Appearance_TextSize: String { return self._s[4494]! } public func Channel_AdminLog_MessageUnkickedName(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4495]!, self._r[4495]!, [_1]) + return formatWithArgumentRanges(self._s[4496]!, self._r[4496]!, [_1]) } - public var Conversation_Edit: String { return self._s[4498]! } - public var CheckoutInfo_SaveInfo: String { return self._s[4499]! } - public var VoiceOver_Chat_AnonymousPoll: String { return self._s[4500]! } - public var Call_CameraTooltip: String { return self._s[4502]! } - public var InstantPage_FeedbackButtonShort: String { return self._s[4503]! } - public var Contacts_InviteToTelegram: String { return self._s[4504]! } - public var Wallet_WordImport_CanNotRemember: String { return self._s[4505]! } - public var Notifications_ResetAllNotifications: String { return self._s[4506]! } - public var Calls_NewCall: String { return self._s[4507]! } - public var VoiceOver_Chat_Music: String { return self._s[4510]! } - public var Channel_Members_AddAdminErrorNotAMember: String { return self._s[4511]! } - public var Channel_Edit_AboutItem: String { return self._s[4512]! } - public var Message_VideoExpired: String { return self._s[4513]! } - public var Passport_Address_TypeTemporaryRegistrationUploadScan: String { return self._s[4514]! } + public var Conversation_Edit: String { return self._s[4499]! } + public var CheckoutInfo_SaveInfo: String { return self._s[4500]! } + public var VoiceOver_Chat_AnonymousPoll: String { return self._s[4501]! } + public var Call_CameraTooltip: String { return self._s[4503]! } + public var InstantPage_FeedbackButtonShort: String { return self._s[4504]! } + public var Contacts_InviteToTelegram: String { return self._s[4505]! } + public var Wallet_WordImport_CanNotRemember: String { return self._s[4506]! } + public var Notifications_ResetAllNotifications: String { return self._s[4507]! } + public var Calls_NewCall: String { return self._s[4508]! } + public var VoiceOver_Chat_Music: String { return self._s[4511]! } + public var Channel_Members_AddAdminErrorNotAMember: String { return self._s[4512]! } + public var Channel_Edit_AboutItem: String { return self._s[4513]! } + public var Message_VideoExpired: String { return self._s[4514]! } + public var Passport_Address_TypeTemporaryRegistrationUploadScan: String { return self._s[4515]! } public func PUSH_CHAT_RETURNED(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4515]!, self._r[4515]!, [_1, _2]) + return formatWithArgumentRanges(self._s[4516]!, self._r[4516]!, [_1, _2]) } - public var NotificationsSound_Input: String { return self._s[4517]! } - public var Notifications_ClassicTones: String { return self._s[4518]! } - public var Conversation_StatusTyping: String { return self._s[4519]! } - public var Checkout_ErrorProviderAccountInvalid: String { return self._s[4520]! } - public var ChatSettings_AutoDownloadSettings_Delimeter: String { return self._s[4521]! } - public var Wallet_Month_ShortSeptember: String { return self._s[4522]! } - public var SettingsSearch_Synonyms_Notifications_BadgeIncludeMutedChats: String { return self._s[4523]! } - public var Conversation_MessageLeaveComment: String { return self._s[4524]! } - public var UserInfo_TapToCall: String { return self._s[4525]! } - public var EnterPasscode_EnterNewPasscodeNew: String { return self._s[4526]! } - public var Conversation_ClearAll: String { return self._s[4528]! } - public var UserInfo_NotificationsDefault: String { return self._s[4529]! } - public var Wallet_Send_OwnAddressAlertText: String { return self._s[4530]! } - public var Map_ChooseAPlace: String { return self._s[4531]! } + public var NotificationsSound_Input: String { return self._s[4518]! } + public var Notifications_ClassicTones: String { return self._s[4519]! } + public var Conversation_StatusTyping: String { return self._s[4520]! } + public var Checkout_ErrorProviderAccountInvalid: String { return self._s[4521]! } + public var ChatSettings_AutoDownloadSettings_Delimeter: String { return self._s[4522]! } + public var Wallet_Month_ShortSeptember: String { return self._s[4523]! } + public var SettingsSearch_Synonyms_Notifications_BadgeIncludeMutedChats: String { return self._s[4524]! } + public var Conversation_MessageLeaveComment: String { return self._s[4525]! } + public var UserInfo_TapToCall: String { return self._s[4526]! } + public var EnterPasscode_EnterNewPasscodeNew: String { return self._s[4527]! } + public var Conversation_ClearAll: String { return self._s[4529]! } + public var UserInfo_NotificationsDefault: String { return self._s[4530]! } + public var Wallet_Send_OwnAddressAlertText: String { return self._s[4531]! } + public var Map_ChooseAPlace: String { return self._s[4532]! } public func Wallet_Receive_ShareInvoiceUrlInfo(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4532]!, self._r[4532]!, [_0]) + return formatWithArgumentRanges(self._s[4533]!, self._r[4533]!, [_0]) } - public var GroupInfo_AddParticipantTitle: String { return self._s[4533]! } - public var ChatList_PeerTypeNonContact: String { return self._s[4534]! } - public var Conversation_SlideToCancel: String { return self._s[4535]! } - public var Month_ShortJuly: String { return self._s[4536]! } - public var SocksProxySetup_ProxyType: String { return self._s[4537]! } + public var GroupInfo_AddParticipantTitle: String { return self._s[4534]! } + public var ChatList_PeerTypeNonContact: String { return self._s[4535]! } + public var Conversation_SlideToCancel: String { return self._s[4536]! } + public var Month_ShortJuly: String { return self._s[4537]! } + public var SocksProxySetup_ProxyType: String { return self._s[4538]! } public func ChatList_DeleteChatConfirmation(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4538]!, self._r[4538]!, [_0]) + return formatWithArgumentRanges(self._s[4539]!, self._r[4539]!, [_0]) } - public var ChatList_EditFolders: String { return self._s[4539]! } - public var TwoStepAuth_SetPasswordHelp: String { return self._s[4540]! } - public var Wallet_Send_ConfirmationConfirm: String { return self._s[4542]! } - public var Wallet_Created_ExportErrorTitle: String { return self._s[4543]! } + public var ChatList_EditFolders: String { return self._s[4540]! } + public var TwoStepAuth_SetPasswordHelp: String { return self._s[4541]! } + public var Wallet_Send_ConfirmationConfirm: String { return self._s[4543]! } + public var Wallet_Created_ExportErrorTitle: String { return self._s[4544]! } public func GroupPermission_ApplyAlertText(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4544]!, self._r[4544]!, [_0]) + return formatWithArgumentRanges(self._s[4545]!, self._r[4545]!, [_0]) } - public var Permissions_PeopleNearbyTitle_v0: String { return self._s[4545]! } - public var ScheduledMessages_RemindersTitle: String { return self._s[4546]! } - public var Your_cards_expiration_year_is_invalid: String { return self._s[4547]! } - public var Wallet_Info_TransactionPendingHeader: String { return self._s[4549]! } - public var UserInfo_ShareMyContactInfo: String { return self._s[4550]! } - public var Passport_DeleteAddress: String { return self._s[4552]! } - public var Passport_DeletePassportConfirmation: String { return self._s[4553]! } - public var Passport_Identity_ReverseSide: String { return self._s[4554]! } - public var CheckoutInfo_ErrorEmailInvalid: String { return self._s[4555]! } - public var Login_InfoLastNamePlaceholder: String { return self._s[4556]! } - public var Passport_FieldAddress: String { return self._s[4557]! } - public var SettingsSearch_Synonyms_Calls_Title: String { return self._s[4558]! } - public var Passport_Identity_ResidenceCountryPlaceholder: String { return self._s[4560]! } - public var Map_Home: String { return self._s[4562]! } - public var PollResults_Title: String { return self._s[4563]! } - public var ArchivedChats_IntroText2: String { return self._s[4565]! } - public var PasscodeSettings_SimplePasscodeHelp: String { return self._s[4566]! } - public var VoiceOver_Chat_ContactPhoneNumber: String { return self._s[4567]! } - public var CallFeedback_ReasonSilentRemote: String { return self._s[4569]! } - public var Passport_Identity_AddPersonalDetails: String { return self._s[4571]! } - public var Group_Info_AdminLog: String { return self._s[4573]! } - public var ChatSettings_AutoPlayTitle: String { return self._s[4574]! } - public var Appearance_Animations: String { return self._s[4575]! } - public var Appearance_TextSizeSetting: String { return self._s[4576]! } - public func MessageTimer_Weeks(_ value: Int32) -> String { + public var Permissions_PeopleNearbyTitle_v0: String { return self._s[4546]! } + public var ScheduledMessages_RemindersTitle: String { return self._s[4547]! } + public var Your_cards_expiration_year_is_invalid: String { return self._s[4548]! } + public var Wallet_Info_TransactionPendingHeader: String { return self._s[4550]! } + public var UserInfo_ShareMyContactInfo: String { return self._s[4551]! } + public var Passport_DeleteAddress: String { return self._s[4553]! } + public var Passport_DeletePassportConfirmation: String { return self._s[4554]! } + public var Passport_Identity_ReverseSide: String { return self._s[4555]! } + public var CheckoutInfo_ErrorEmailInvalid: String { return self._s[4556]! } + public var Login_InfoLastNamePlaceholder: String { return self._s[4557]! } + public var Passport_FieldAddress: String { return self._s[4558]! } + public var SettingsSearch_Synonyms_Calls_Title: String { return self._s[4559]! } + public var Passport_Identity_ResidenceCountryPlaceholder: String { return self._s[4561]! } + public var Map_Home: String { return self._s[4563]! } + public var PollResults_Title: String { return self._s[4564]! } + public var ArchivedChats_IntroText2: String { return self._s[4566]! } + public var PasscodeSettings_SimplePasscodeHelp: String { return self._s[4567]! } + public var VoiceOver_Chat_ContactPhoneNumber: String { return self._s[4568]! } + public var CallFeedback_ReasonSilentRemote: String { return self._s[4570]! } + public var Passport_Identity_AddPersonalDetails: String { return self._s[4572]! } + public var Group_Info_AdminLog: String { return self._s[4574]! } + public var ChatSettings_AutoPlayTitle: String { return self._s[4575]! } + public var Appearance_Animations: String { return self._s[4576]! } + public var Appearance_TextSizeSetting: String { return self._s[4577]! } + public func ForwardedPhotos(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[0 * 6 + Int(form.rawValue)]!, stringValue) } - public func GroupInfo_ShowMoreMembers(_ value: Int32) -> String { + public func SharedMedia_Video(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[1 * 6 + Int(form.rawValue)]!, stringValue) } - public func PasscodeSettings_FailedAttempts(_ value: Int32) -> String { + public func Stats_GroupTopAdminDeletions(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[2 * 6 + Int(form.rawValue)]!, stringValue) } - public func ServiceMessage_GameScoreExtended(_ value: Int32) -> String { + public func CreatePoll_AddMoreOptions(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[3 * 6 + Int(form.rawValue)]!, stringValue) } - public func Contacts_InviteContacts(_ value: Int32) -> String { + public func Conversation_TitleReplies(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[4 * 6 + Int(form.rawValue)]!, stringValue) } - public func ChatList_DeleteConfirmation(_ value: Int32) -> String { + public func Map_ETAMinutes(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[5 * 6 + Int(form.rawValue)]!, stringValue) } - public func StickerPack_AddStickerCount(_ value: Int32) -> String { + public func Conversation_StatusOnline(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[6 * 6 + Int(form.rawValue)]!, stringValue) } - public func Stats_GroupTopInviterInvites(_ value: Int32) -> String { + public func Call_ShortMinutes(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[7 * 6 + Int(form.rawValue)]!, stringValue) } - public func PrivacyLastSeenSettings_AddUsers(_ value: Int32) -> String { + public func Stats_GroupShowMoreTopPosters(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[8 * 6 + Int(form.rawValue)]!, stringValue) } - public func AttachmentMenu_SendVideo(_ value: Int32) -> String { + public func ChatList_MessageVideos(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[9 * 6 + Int(form.rawValue)]!, stringValue) } - public func ForwardedStickers(_ value: Int32) -> String { + public func Stats_GroupShowMoreTopAdmins(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[10 * 6 + Int(form.rawValue)]!, stringValue) } - public func SharedMedia_Generic(_ value: Int32) -> String { + public func OldChannels_InactiveYear(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[11 * 6 + Int(form.rawValue)]!, stringValue) } - public func Stats_GroupTopPosterMessages(_ value: Int32) -> String { + public func Map_ETAHours(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[12 * 6 + Int(form.rawValue)]!, stringValue) } - public func MessageTimer_Minutes(_ value: Int32) -> String { + public func Stats_MessageViews(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[13 * 6 + Int(form.rawValue)]!, stringValue) } - public func Notification_GameScoreSimple(_ value: Int32) -> String { + public func ChatList_DeleteConfirmation(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[14 * 6 + Int(form.rawValue)]!, stringValue) } - public func Watch_LastSeen_MinutesAgo(_ value: Int32) -> String { + public func Conversation_MessageViewComments(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[15 * 6 + Int(form.rawValue)]!, stringValue) } - public func VoiceOver_Chat_ContactPhoneNumberCount(_ value: Int32) -> String { + public func Call_ShortSeconds(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[16 * 6 + Int(form.rawValue)]!, stringValue) } - public func PUSH_CHANNEL_MESSAGE_FWDS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { - let form = getPluralizationForm(self.lc, selector) - return String(format: self._ps[17 * 6 + Int(form.rawValue)]!, _1, _2) + public func OldChannels_GroupFormat(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[17 * 6 + Int(form.rawValue)]!, stringValue) } - public func ServiceMessage_GameScoreSelfExtended(_ value: Int32) -> String { + public func Contacts_InviteContacts(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[18 * 6 + Int(form.rawValue)]!, stringValue) } - public func PUSH_CHANNEL_MESSAGE_ROUNDS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { - let form = getPluralizationForm(self.lc, selector) - return String(format: self._ps[19 * 6 + Int(form.rawValue)]!, _1, _2) - } - public func UserCount(_ value: Int32) -> String { + public func Watch_LastSeen_MinutesAgo(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[20 * 6 + Int(form.rawValue)]!, stringValue) - } - public func ChatListFilter_ShowMoreChats(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[21 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Notifications_ExceptionMuteExpires_Minutes(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[22 * 6 + Int(form.rawValue)]!, stringValue) - } - public func ForwardedMessages(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[23 * 6 + Int(form.rawValue)]!, stringValue) - } - public func PeopleNearby_ShowMorePeople(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[24 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Map_ETAMinutes(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[25 * 6 + Int(form.rawValue)]!, stringValue) - } - public func ServiceMessage_GameScoreSelfSimple(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[26 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Stats_GroupShowMoreTopAdmins(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[27 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Call_Minutes(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[28 * 6 + Int(form.rawValue)]!, stringValue) - } - public func QuickSend_Photos(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[29 * 6 + Int(form.rawValue)]!, stringValue) - } - public func MessageTimer_Months(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[30 * 6 + Int(form.rawValue)]!, stringValue) - } - public func MuteFor_Days(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[31 * 6 + Int(form.rawValue)]!, stringValue) - } - public func ForwardedLocations(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[32 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Conversation_TitleComments(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[33 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Conversation_ContextViewReplies(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[34 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Conversation_SelectedMessages(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[35 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Conversation_StatusMembers(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[36 * 6 + Int(form.rawValue)]!, stringValue) - } - public func ChatList_Search_Messages(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[37 * 6 + Int(form.rawValue)]!, stringValue) - } - public func VoiceOver_Chat_PollOptionCount(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[38 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Forward_ConfirmMultipleFiles(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[39 * 6 + Int(form.rawValue)]!, stringValue) - } - public func StickerPack_StickerCount(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[40 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Wallet_Updated_HoursAgo(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[41 * 6 + Int(form.rawValue)]!, stringValue) - } - public func PUSH_CHAT_MESSAGE_ROUNDS(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String { - let form = getPluralizationForm(self.lc, selector) - return String(format: self._ps[42 * 6 + Int(form.rawValue)]!, _2, _1, _3) - } - public func AttachmentMenu_SendGif(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[43 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Map_ETAHours(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[44 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Call_ShortSeconds(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[45 * 6 + Int(form.rawValue)]!, stringValue) - } - public func OldChannels_InactiveWeek(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[46 * 6 + Int(form.rawValue)]!, stringValue) - } - public func MessageTimer_Hours(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[47 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Watch_UserInfo_Mute(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[48 * 6 + Int(form.rawValue)]!, stringValue) - } - public func SharedMedia_DeleteItemsConfirmation(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[49 * 6 + Int(form.rawValue)]!, stringValue) - } - public func ForwardedContacts(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[50 * 6 + Int(form.rawValue)]!, stringValue) - } - public func AttachmentMenu_SendPhoto(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[51 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Theme_UsersCount(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[52 * 6 + Int(form.rawValue)]!, stringValue) - } - public func CreatePoll_AddMoreOptions(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[53 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Conversation_TitleReplies(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[54 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Notification_GameScoreSelfSimple(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[55 * 6 + Int(form.rawValue)]!, stringValue) - } - public func ChatList_SelectedChats(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[56 * 6 + Int(form.rawValue)]!, stringValue) - } - public func MessageTimer_Years(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[57 * 6 + Int(form.rawValue)]!, stringValue) - } - public func SharedMedia_Link(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[58 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Stats_MessageForwards(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[59 * 6 + Int(form.rawValue)]!, stringValue) - } - public func ChatList_MessagePhotos(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[60 * 6 + Int(form.rawValue)]!, stringValue) - } - public func StickerPack_RemoveMaskCount(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[61 * 6 + Int(form.rawValue)]!, stringValue) - } - public func ServiceMessage_GameScoreSimple(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[62 * 6 + Int(form.rawValue)]!, stringValue) - } - public func VoiceOver_Chat_PollVotes(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[63 * 6 + Int(form.rawValue)]!, stringValue) - } - public func ForwardedPolls(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[64 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Wallpaper_DeleteConfirmation(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[65 * 6 + Int(form.rawValue)]!, stringValue) - } - public func ForwardedPhotos(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[66 * 6 + Int(form.rawValue)]!, stringValue) - } - public func PUSH_MESSAGE_ROUNDS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { - let form = getPluralizationForm(self.lc, selector) - return String(format: self._ps[67 * 6 + Int(form.rawValue)]!, _1, _2) - } - public func Conversation_StatusOnline(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[68 * 6 + Int(form.rawValue)]!, stringValue) - } - public func PUSH_MESSAGE_FWDS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { - let form = getPluralizationForm(self.lc, selector) - return String(format: self._ps[69 * 6 + Int(form.rawValue)]!, _1, _2) - } - public func PUSH_CHAT_MESSAGE_VIDEOS(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String { - let form = getPluralizationForm(self.lc, selector) - return String(format: self._ps[70 * 6 + Int(form.rawValue)]!, _2, _1, _3) - } - public func MuteExpires_Minutes(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[71 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Media_SharePhoto(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[72 * 6 + Int(form.rawValue)]!, stringValue) - } - public func ChatList_MessageVideos(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[73 * 6 + Int(form.rawValue)]!, stringValue) - } - public func PUSH_MESSAGES(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { - let form = getPluralizationForm(self.lc, selector) - return String(format: self._ps[74 * 6 + Int(form.rawValue)]!, _1, _2) - } - public func Notifications_Exceptions(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[75 * 6 + Int(form.rawValue)]!, stringValue) - } - public func ForwardedAuthorsOthers(_ selector: Int32, _ _0: String, _ _1: String) -> String { - let form = getPluralizationForm(self.lc, selector) - return String(format: self._ps[76 * 6 + Int(form.rawValue)]!, _0, _1) - } - public func Stats_MessageViews(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[77 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Stats_GroupTopPosterChars(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[78 * 6 + Int(form.rawValue)]!, stringValue) - } - public func MessageTimer_ShortMinutes(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[79 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Media_ShareVideo(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[80 * 6 + Int(form.rawValue)]!, stringValue) - } - public func VoiceOver_Chat_ContactEmailCount(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[81 * 6 + Int(form.rawValue)]!, stringValue) - } - public func PUSH_MESSAGE_PHOTOS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { - let form = getPluralizationForm(self.lc, selector) - return String(format: self._ps[82 * 6 + Int(form.rawValue)]!, _1, _2) - } - public func Stats_GroupShowMoreTopInviters(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[83 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Watch_LastSeen_HoursAgo(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[84 * 6 + Int(form.rawValue)]!, stringValue) - } - public func PUSH_CHAT_MESSAGE_FWDS(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String { - let form = getPluralizationForm(self.lc, selector) - return String(format: self._ps[85 * 6 + Int(form.rawValue)]!, _2, _1, _3) - } - public func Notifications_ExceptionMuteExpires_Days(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[86 * 6 + Int(form.rawValue)]!, stringValue) - } - public func LastSeen_HoursAgo(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[87 * 6 + Int(form.rawValue)]!, stringValue) - } - public func DialogList_LiveLocationChatsCount(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[88 * 6 + Int(form.rawValue)]!, stringValue) - } - public func PollResults_ShowMore(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[89 * 6 + Int(form.rawValue)]!, stringValue) - } - public func StickerPack_RemoveStickerCount(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[90 * 6 + Int(form.rawValue)]!, stringValue) - } - public func SharedMedia_Photo(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[91 * 6 + Int(form.rawValue)]!, stringValue) - } - public func PUSH_CHANNEL_MESSAGE_VIDEOS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { - let form = getPluralizationForm(self.lc, selector) - return String(format: self._ps[92 * 6 + Int(form.rawValue)]!, _1, _2) - } - public func MuteExpires_Hours(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[93 * 6 + Int(form.rawValue)]!, stringValue) - } - public func ForwardedGifs(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[94 * 6 + Int(form.rawValue)]!, stringValue) - } - public func MuteFor_Hours(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[95 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Invitation_Members(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[96 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Stats_GroupTopAdminDeletions(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[97 * 6 + Int(form.rawValue)]!, stringValue) - } - public func MessageTimer_ShortHours(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[98 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Wallet_Updated_MinutesAgo(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[99 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Media_ShareItem(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[100 * 6 + Int(form.rawValue)]!, stringValue) - } - public func PUSH_CHAT_MESSAGES(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String { - let form = getPluralizationForm(self.lc, selector) - return String(format: self._ps[101 * 6 + Int(form.rawValue)]!, _2, _1, _3) - } - public func MessageTimer_Seconds(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[102 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Call_Seconds(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[103 * 6 + Int(form.rawValue)]!, stringValue) - } - public func SharedMedia_Video(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[104 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Notification_GameScoreExtended(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[105 * 6 + Int(form.rawValue)]!, stringValue) - } - public func ForwardedVideos(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[106 * 6 + Int(form.rawValue)]!, stringValue) - } - public func SharedMedia_File(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[107 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Stats_GroupShowMoreTopPosters(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[108 * 6 + Int(form.rawValue)]!, stringValue) - } - public func ForwardedAudios(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[109 * 6 + Int(form.rawValue)]!, stringValue) - } - public func MessageTimer_ShortSeconds(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[110 * 6 + Int(form.rawValue)]!, stringValue) - } - public func InstantPage_Views(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[111 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Stats_GroupTopAdminKicks(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[112 * 6 + Int(form.rawValue)]!, stringValue) - } - public func PUSH_CHANNEL_MESSAGES(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { - let form = getPluralizationForm(self.lc, selector) - return String(format: self._ps[113 * 6 + Int(form.rawValue)]!, _1, _2) - } - public func PUSH_MESSAGE_VIDEOS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { - let form = getPluralizationForm(self.lc, selector) - return String(format: self._ps[114 * 6 + Int(form.rawValue)]!, _1, _2) - } - public func PUSH_CHANNEL_MESSAGE_PHOTOS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { - let form = getPluralizationForm(self.lc, selector) - return String(format: self._ps[115 * 6 + Int(form.rawValue)]!, _1, _2) - } - public func Notification_GameScoreSelfExtended(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[116 * 6 + Int(form.rawValue)]!, stringValue) - } - public func MuteExpires_Days(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[117 * 6 + Int(form.rawValue)]!, stringValue) - } - public func OldChannels_GroupFormat(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[118 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Contacts_ImportersCount(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[119 * 6 + Int(form.rawValue)]!, stringValue) - } - public func AttachmentMenu_SendItem(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[120 * 6 + Int(form.rawValue)]!, stringValue) - } - public func LiveLocation_MenuChatsCount(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[121 * 6 + Int(form.rawValue)]!, stringValue) - } - public func ForwardedVideoMessages(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[122 * 6 + Int(form.rawValue)]!, stringValue) - } - public func MessagePoll_QuizCount(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[123 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Passport_Scans(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[124 * 6 + Int(form.rawValue)]!, stringValue) - } - public func OldChannels_Leave(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[125 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Call_ShortMinutes(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[126 * 6 + Int(form.rawValue)]!, stringValue) - } - public func PUSH_CHAT_MESSAGE_PHOTOS(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String { - let form = getPluralizationForm(self.lc, selector) - return String(format: self._ps[127 * 6 + Int(form.rawValue)]!, _2, _1, _3) - } - public func OldChannels_InactiveYear(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[128 * 6 + Int(form.rawValue)]!, stringValue) - } - public func LastSeen_MinutesAgo(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[129 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Conversation_StatusSubscribers(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[130 * 6 + Int(form.rawValue)]!, stringValue) - } - public func InviteText_ContactsCountText(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[131 * 6 + Int(form.rawValue)]!, stringValue) - } - public func StickerPack_AddMaskCount(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[132 * 6 + Int(form.rawValue)]!, stringValue) - } - public func LiveLocationUpdated_MinutesAgo(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[133 * 6 + Int(form.rawValue)]!, stringValue) - } - public func MessagePoll_VotedCount(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[134 * 6 + Int(form.rawValue)]!, stringValue) - } - public func MessageTimer_ShortWeeks(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[135 * 6 + Int(form.rawValue)]!, stringValue) - } - public func MessageTimer_Days(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[136 * 6 + Int(form.rawValue)]!, stringValue) - } - public func ForwardedFiles(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[137 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Notifications_ExceptionMuteExpires_Hours(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[138 * 6 + Int(form.rawValue)]!, stringValue) + return String(format: self._ps[19 * 6 + Int(form.rawValue)]!, stringValue) } public func OldChannels_InactiveMonth(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[139 * 6 + Int(form.rawValue)]!, stringValue) + return String(format: self._ps[20 * 6 + Int(form.rawValue)]!, stringValue) } - public func ChatList_DeletedChats(_ value: Int32) -> String { + public func MessageTimer_ShortSeconds(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[140 * 6 + Int(form.rawValue)]!, stringValue) + return String(format: self._ps[21 * 6 + Int(form.rawValue)]!, stringValue) } - public func Conversation_MessageViewComments(_ value: Int32) -> String { + public func ForwardedGifs(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[141 * 6 + Int(form.rawValue)]!, stringValue) + return String(format: self._ps[22 * 6 + Int(form.rawValue)]!, stringValue) } - public func Conversation_LiveLocationMembersCount(_ value: Int32) -> String { + public func MessageTimer_Hours(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[142 * 6 + Int(form.rawValue)]!, stringValue) + return String(format: self._ps[23 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Notification_GameScoreExtended(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[24 * 6 + Int(form.rawValue)]!, stringValue) + } + public func PUSH_CHANNEL_MESSAGES(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { + let form = getPluralizationForm(self.lc, selector) + return String(format: self._ps[25 * 6 + Int(form.rawValue)]!, _1, _2) + } + public func SharedMedia_Link(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[26 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Stats_GroupTopPosterMessages(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[27 * 6 + Int(form.rawValue)]!, stringValue) + } + public func ForwardedAudios(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[28 * 6 + Int(form.rawValue)]!, stringValue) } public func GroupInfo_ParticipantCount(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[143 * 6 + Int(form.rawValue)]!, stringValue) + return String(format: self._ps[29 * 6 + Int(form.rawValue)]!, stringValue) } - public func Stats_GroupTopAdminBans(_ value: Int32) -> String { + public func PUSH_MESSAGES(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { + let form = getPluralizationForm(self.lc, selector) + return String(format: self._ps[30 * 6 + Int(form.rawValue)]!, _1, _2) + } + public func ForwardedVideos(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[144 * 6 + Int(form.rawValue)]!, stringValue) + return String(format: self._ps[31 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Conversation_StatusSubscribers(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[32 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Media_ShareVideo(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[33 * 6 + Int(form.rawValue)]!, stringValue) + } + public func LiveLocation_MenuChatsCount(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[34 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Stats_GroupTopAdminKicks(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[35 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Forward_ConfirmMultipleFiles(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[36 * 6 + Int(form.rawValue)]!, stringValue) + } + public func StickerPack_AddStickerCount(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[37 * 6 + Int(form.rawValue)]!, stringValue) + } + public func VoiceOver_Chat_ContactPhoneNumberCount(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[38 * 6 + Int(form.rawValue)]!, stringValue) + } + public func PollResults_ShowMore(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[39 * 6 + Int(form.rawValue)]!, stringValue) + } + public func MuteExpires_Minutes(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[40 * 6 + Int(form.rawValue)]!, stringValue) + } + public func ServiceMessage_GameScoreSelfExtended(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[41 * 6 + Int(form.rawValue)]!, stringValue) + } + public func SharedMedia_Photo(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[42 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Media_SharePhoto(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[43 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Stats_MessageForwards(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[44 * 6 + Int(form.rawValue)]!, stringValue) } public func Chat_DeleteMessagesConfirmation(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[145 * 6 + Int(form.rawValue)]!, stringValue) + return String(format: self._ps[45 * 6 + Int(form.rawValue)]!, stringValue) + } + public func AttachmentMenu_SendGif(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[46 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Stats_GroupShowMoreTopInviters(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[47 * 6 + Int(form.rawValue)]!, stringValue) + } + public func ForwardedAuthorsOthers(_ selector: Int32, _ _0: String, _ _1: String) -> String { + let form = getPluralizationForm(self.lc, selector) + return String(format: self._ps[48 * 6 + Int(form.rawValue)]!, _0, _1) + } + public func Media_ShareItem(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[49 * 6 + Int(form.rawValue)]!, stringValue) + } + public func ForwardedStickers(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[50 * 6 + Int(form.rawValue)]!, stringValue) + } + public func ChatList_Search_Messages(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[51 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Watch_UserInfo_Mute(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[52 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Contacts_ImportersCount(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[53 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Conversation_SelectedMessages(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[54 * 6 + Int(form.rawValue)]!, stringValue) + } + public func GroupInfo_ShowMoreMembers(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[55 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Notifications_Exceptions(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[56 * 6 + Int(form.rawValue)]!, stringValue) + } + public func MessageTimer_Days(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[57 * 6 + Int(form.rawValue)]!, stringValue) + } + public func AttachmentMenu_SendVideo(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[58 * 6 + Int(form.rawValue)]!, stringValue) + } + public func MuteExpires_Days(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[59 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Conversation_LiveLocationMembersCount(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[60 * 6 + Int(form.rawValue)]!, stringValue) + } + public func ChatList_MessagePhotos(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[61 * 6 + Int(form.rawValue)]!, stringValue) + } + public func OldChannels_Leave(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[62 * 6 + Int(form.rawValue)]!, stringValue) + } + public func SharedMedia_File(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[63 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Theme_UsersCount(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[64 * 6 + Int(form.rawValue)]!, stringValue) + } + public func PUSH_MESSAGE_FWDS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { + let form = getPluralizationForm(self.lc, selector) + return String(format: self._ps[65 * 6 + Int(form.rawValue)]!, _1, _2) + } + public func ForwardedVideoMessages(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[66 * 6 + Int(form.rawValue)]!, stringValue) + } + public func PUSH_CHANNEL_MESSAGE_ROUNDS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { + let form = getPluralizationForm(self.lc, selector) + return String(format: self._ps[67 * 6 + Int(form.rawValue)]!, _1, _2) + } + public func PUSH_CHANNEL_MESSAGE_VIDEOS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { + let form = getPluralizationForm(self.lc, selector) + return String(format: self._ps[68 * 6 + Int(form.rawValue)]!, _1, _2) + } + public func VoiceOver_Chat_PollVotes(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[69 * 6 + Int(form.rawValue)]!, stringValue) + } + public func ForwardedLocations(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[70 * 6 + Int(form.rawValue)]!, stringValue) + } + public func MessageTimer_Seconds(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[71 * 6 + Int(form.rawValue)]!, stringValue) + } + public func StickerPack_RemoveMaskCount(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[72 * 6 + Int(form.rawValue)]!, stringValue) + } + public func PUSH_CHAT_MESSAGES(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String { + let form = getPluralizationForm(self.lc, selector) + return String(format: self._ps[73 * 6 + Int(form.rawValue)]!, _2, _1, _3) + } + public func Passport_Scans(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[74 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Wallpaper_DeleteConfirmation(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[75 * 6 + Int(form.rawValue)]!, stringValue) + } + public func LiveLocationUpdated_MinutesAgo(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[76 * 6 + Int(form.rawValue)]!, stringValue) + } + public func PUSH_CHAT_MESSAGE_PHOTOS(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String { + let form = getPluralizationForm(self.lc, selector) + return String(format: self._ps[77 * 6 + Int(form.rawValue)]!, _2, _1, _3) + } + public func PUSH_MESSAGE_PHOTOS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { + let form = getPluralizationForm(self.lc, selector) + return String(format: self._ps[78 * 6 + Int(form.rawValue)]!, _1, _2) + } + public func MessageTimer_ShortWeeks(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[79 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Call_Minutes(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[80 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Stats_GroupTopAdminBans(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[81 * 6 + Int(form.rawValue)]!, stringValue) + } + public func ForwardedContacts(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[82 * 6 + Int(form.rawValue)]!, stringValue) + } + public func MuteFor_Hours(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[83 * 6 + Int(form.rawValue)]!, stringValue) + } + public func ServiceMessage_GameScoreSelfSimple(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[84 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Conversation_TitleComments(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[85 * 6 + Int(form.rawValue)]!, stringValue) + } + public func ChatList_SelectedChats(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[86 * 6 + Int(form.rawValue)]!, stringValue) + } + public func PrivacyLastSeenSettings_AddUsers(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[87 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Notification_GameScoreSelfExtended(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[88 * 6 + Int(form.rawValue)]!, stringValue) + } + public func SharedMedia_DeleteItemsConfirmation(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[89 * 6 + Int(form.rawValue)]!, stringValue) + } + public func StickerPack_StickerCount(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[90 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Notifications_ExceptionMuteExpires_Minutes(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[91 * 6 + Int(form.rawValue)]!, stringValue) + } + public func SharedMedia_Generic(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[92 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Wallet_Updated_MinutesAgo(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[93 * 6 + Int(form.rawValue)]!, stringValue) + } + public func PUSH_CHANNEL_MESSAGE_FWDS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { + let form = getPluralizationForm(self.lc, selector) + return String(format: self._ps[94 * 6 + Int(form.rawValue)]!, _1, _2) + } + public func Wallet_Updated_HoursAgo(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[95 * 6 + Int(form.rawValue)]!, stringValue) + } + public func PUSH_CHANNEL_MESSAGE_PHOTOS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { + let form = getPluralizationForm(self.lc, selector) + return String(format: self._ps[96 * 6 + Int(form.rawValue)]!, _1, _2) + } + public func StickerPack_RemoveStickerCount(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[97 * 6 + Int(form.rawValue)]!, stringValue) + } + public func MessageTimer_ShortMinutes(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[98 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Stats_GroupTopInviterInvites(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[99 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Conversation_StatusMembers(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[100 * 6 + Int(form.rawValue)]!, stringValue) + } + public func StickerPack_AddMaskCount(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[101 * 6 + Int(form.rawValue)]!, stringValue) + } + public func MuteFor_Days(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[102 * 6 + Int(form.rawValue)]!, stringValue) + } + public func LastSeen_HoursAgo(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[103 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Notifications_ExceptionMuteExpires_Days(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[104 * 6 + Int(form.rawValue)]!, stringValue) + } + public func MessagePoll_VotedCount(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[105 * 6 + Int(form.rawValue)]!, stringValue) + } + public func MuteExpires_Hours(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[106 * 6 + Int(form.rawValue)]!, stringValue) + } + public func ServiceMessage_GameScoreExtended(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[107 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Notification_GameScoreSelfSimple(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[108 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Notification_GameScoreSimple(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[109 * 6 + Int(form.rawValue)]!, stringValue) + } + public func AttachmentMenu_SendPhoto(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[110 * 6 + Int(form.rawValue)]!, stringValue) + } + public func MessageTimer_Weeks(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[111 * 6 + Int(form.rawValue)]!, stringValue) + } + public func ServiceMessage_GameScoreSimple(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[112 * 6 + Int(form.rawValue)]!, stringValue) + } + public func AttachmentMenu_SendItem(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[113 * 6 + Int(form.rawValue)]!, stringValue) + } + public func QuickSend_Photos(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[114 * 6 + Int(form.rawValue)]!, stringValue) + } + public func ForwardedPolls(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[115 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Invitation_Members(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[116 * 6 + Int(form.rawValue)]!, stringValue) + } + public func PUSH_CHAT_MESSAGE_VIDEOS(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String { + let form = getPluralizationForm(self.lc, selector) + return String(format: self._ps[117 * 6 + Int(form.rawValue)]!, _2, _1, _3) + } + public func MessageTimer_Months(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[118 * 6 + Int(form.rawValue)]!, stringValue) + } + public func PasscodeSettings_FailedAttempts(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[119 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Conversation_ContextViewReplies(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[120 * 6 + Int(form.rawValue)]!, stringValue) + } + public func VoiceOver_Chat_PollOptionCount(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[121 * 6 + Int(form.rawValue)]!, stringValue) + } + public func ChatListFilter_ShowMoreChats(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[122 * 6 + Int(form.rawValue)]!, stringValue) + } + public func LastSeen_MinutesAgo(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[123 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Notifications_ExceptionMuteExpires_Hours(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[124 * 6 + Int(form.rawValue)]!, stringValue) + } + public func ChatList_DeletedChats(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[125 * 6 + Int(form.rawValue)]!, stringValue) + } + public func PUSH_CHAT_MESSAGE_ROUNDS(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String { + let form = getPluralizationForm(self.lc, selector) + return String(format: self._ps[126 * 6 + Int(form.rawValue)]!, _2, _1, _3) + } + public func MessageTimer_Minutes(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[127 * 6 + Int(form.rawValue)]!, stringValue) + } + public func InstantPage_Views(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[128 * 6 + Int(form.rawValue)]!, stringValue) + } + public func VoiceOver_Chat_ContactEmailCount(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[129 * 6 + Int(form.rawValue)]!, stringValue) + } + public func PUSH_CHAT_MESSAGE_FWDS(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String { + let form = getPluralizationForm(self.lc, selector) + return String(format: self._ps[130 * 6 + Int(form.rawValue)]!, _2, _1, _3) + } + public func DialogList_LiveLocationChatsCount(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[131 * 6 + Int(form.rawValue)]!, stringValue) + } + public func UserCount(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[132 * 6 + Int(form.rawValue)]!, stringValue) + } + public func PUSH_MESSAGE_VIDEOS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { + let form = getPluralizationForm(self.lc, selector) + return String(format: self._ps[133 * 6 + Int(form.rawValue)]!, _1, _2) + } + public func OldChannels_InactiveWeek(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[134 * 6 + Int(form.rawValue)]!, stringValue) } public func MessageTimer_ShortDays(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[135 * 6 + Int(form.rawValue)]!, stringValue) + } + public func PeopleNearby_ShowMorePeople(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[136 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Stats_GroupTopPosterChars(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[137 * 6 + Int(form.rawValue)]!, stringValue) + } + public func MessageTimer_Years(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[138 * 6 + Int(form.rawValue)]!, stringValue) + } + public func PUSH_MESSAGE_ROUNDS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { + let form = getPluralizationForm(self.lc, selector) + return String(format: self._ps[139 * 6 + Int(form.rawValue)]!, _1, _2) + } + public func ForwardedFiles(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[140 * 6 + Int(form.rawValue)]!, stringValue) + } + public func MessagePoll_QuizCount(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[141 * 6 + Int(form.rawValue)]!, stringValue) + } + public func MessageTimer_ShortHours(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[142 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Watch_LastSeen_HoursAgo(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[143 * 6 + Int(form.rawValue)]!, stringValue) + } + public func InviteText_ContactsCountText(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[144 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Call_Seconds(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[145 * 6 + Int(form.rawValue)]!, stringValue) + } + public func ForwardedMessages(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[146 * 6 + Int(form.rawValue)]!, stringValue) diff --git a/submodules/TelegramUI/Resources/PresentationStrings.mapping b/submodules/TelegramUI/Resources/PresentationStrings.mapping index d5ec1f5bd896871d267468b9196bd74250ec70b6..d941da328b653f2b2723377ee1444a538988f82c 100644 GIT binary patch delta 5522 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 UkIYnDq?`{zCNVT~z%*g}KP9-*9{>OV delta 5415 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 ZX~pONxwF4{|oyDqkjMZ diff --git a/submodules/TelegramUI/Sources/ChatController.swift b/submodules/TelegramUI/Sources/ChatController.swift index a2a872e1d7..41e66add9f 100644 --- a/submodules/TelegramUI/Sources/ChatController.swift +++ b/submodules/TelegramUI/Sources/ChatController.swift @@ -289,6 +289,7 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G private var stickerSettingsDisposable: Disposable? private var applicationInForegroundDisposable: Disposable? + private var applicationInFocusDisposable: Disposable? private var checkedPeerChatServiceActions = false @@ -3071,6 +3072,17 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G } }) + if case let .peer(peerId) = chatLocation, peerId.namespace == Namespaces.Peer.SecretChat { + self.applicationInFocusDisposable = (context.sharedContext.applicationBindings.applicationIsActive + |> distinctUntilChanged + |> deliverOn(Queue.mainQueue())).start(next: { [weak self] value in + guard let strongSelf = self, strongSelf.isNodeLoaded else { + return + } + strongSelf.chatDisplayNode.updateIsBlurred(!value) + }) + } + self.canReadHistoryDisposable = (combineLatest(context.sharedContext.applicationBindings.applicationInForeground, self.canReadHistory.get()) |> map { a, b in return a && b } |> deliverOnMainQueue).start(next: { [weak self] value in @@ -3139,6 +3151,7 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G self.presentationDataDisposable?.dispose() self.searchDisposable?.dispose() self.applicationInForegroundDisposable?.dispose() + self.applicationInFocusDisposable?.dispose() self.canReadHistoryDisposable?.dispose() self.networkStateDisposable?.dispose() self.chatAdditionalDataDisposable.dispose() @@ -8461,7 +8474,7 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G }, error: { _ in let presentationData = context.sharedContext.currentPresentationData.with { $0 } - present(textAlertController(context: context, title: nil, text: presentationData.strings.Login_UnknownError, actions: [TextAlertAction(type: .defaultAction, title: presentationData.strings.Common_OK, action: {})]), nil) + present(textAlertController(context: context, title: nil, text: presentationData.strings.Channel_DiscussionMessageUnavailable, actions: [TextAlertAction(type: .defaultAction, title: presentationData.strings.Common_OK, action: {})]), nil) }) cancelImpl = { [weak statusController] in diff --git a/submodules/TelegramUI/Sources/ChatControllerNode.swift b/submodules/TelegramUI/Sources/ChatControllerNode.swift index 5dc4883acd..949e67c95d 100644 --- a/submodules/TelegramUI/Sources/ChatControllerNode.swift +++ b/submodules/TelegramUI/Sources/ChatControllerNode.swift @@ -14,6 +14,7 @@ import TelegramNotices import ReactionSelectionNode import TelegramUniversalVideoContent import ChatInterfaceState +import FastBlur final class VideoNavigationControllerDropContentItem: NavigationControllerDropContentItem { let itemNode: OverlayMediaItemNode @@ -309,6 +310,7 @@ class ChatControllerNode: ASDisplayNode, UIScrollViewDelegate { let backgroundNode: WallpaperBackgroundNode let backgroundImageDisposable = MetaDisposable() let historyNode: ChatHistoryListNode + var blurredHistoryNode: ASImageNode? let reactionContainerNode: ReactionSelectionParentNode let historyNodeContainer: ASDisplayNode let loadingNode: ChatLoadingNode @@ -1220,6 +1222,9 @@ class ChatControllerNode: ASDisplayNode, UIScrollViewDelegate { transition.updateFrame(node: self.historyNodeContainer, frame: contentBounds) transition.updateBounds(node: self.historyNode, bounds: CGRect(origin: CGPoint(), size: contentBounds.size)) transition.updatePosition(node: self.historyNode, position: CGPoint(x: contentBounds.size.width / 2.0, y: contentBounds.size.height / 2.0)) + if let blurredHistoryNode = self.blurredHistoryNode { + transition.updateFrame(node: blurredHistoryNode, frame: contentBounds) + } transition.updateFrame(node: self.loadingNode, frame: contentBounds) @@ -2933,4 +2938,39 @@ class ChatControllerNode: ASDisplayNode, UIScrollViewDelegate { self.updateHasEmbeddedTitleContent?() } } + + func updateIsBlurred(_ isBlurred: Bool) { + if isBlurred { + if self.blurredHistoryNode == nil { + let unscaledSize = self.historyNode.frame.size + let image = generateImage(CGSize(width: floor(unscaledSize.width), height: floor(unscaledSize.height)), opaque: true, scale: 1.0, rotatedContext: { size, context in + context.clear(CGRect(origin: CGPoint(), size: size)) + + UIGraphicsPushContext(context) + + let backgroundFrame = self.backgroundNode.view.convert(self.backgroundNode.bounds, to: self.historyNode.supernode?.view) + self.backgroundNode.view.drawHierarchy(in: backgroundFrame, afterScreenUpdates: false) + + context.translateBy(x: size.width / 2.0, y: size.height / 2.0) + context.scaleBy(x: -1.0, y: -1.0) + context.translateBy(x: -size.width / 2.0, y: -size.height / 2.0) + + self.historyNode.view.drawHierarchy(in: CGRect(origin: CGPoint(), size: unscaledSize), afterScreenUpdates: false) + + UIGraphicsPopContext() + }).flatMap(applyScreenshotEffectToImage) + let blurredHistoryNode = ASImageNode() + blurredHistoryNode.image = image + blurredHistoryNode.frame = self.historyNode.frame + self.blurredHistoryNode = blurredHistoryNode + self.historyNode.supernode?.insertSubnode(blurredHistoryNode, aboveSubnode: self.historyNode) + } + } else { + if let blurredHistoryNode = self.blurredHistoryNode { + self.blurredHistoryNode = nil + blurredHistoryNode.removeFromSupernode() + } + } + self.historyNode.isHidden = isBlurred + } } diff --git a/submodules/TelegramUI/Sources/ChatHistoryEntriesForView.swift b/submodules/TelegramUI/Sources/ChatHistoryEntriesForView.swift index 289d664c53..04d74ba544 100644 --- a/submodules/TelegramUI/Sources/ChatHistoryEntriesForView.swift +++ b/submodules/TelegramUI/Sources/ChatHistoryEntriesForView.swift @@ -139,7 +139,7 @@ func chatHistoryEntriesForView(location: ChatLocation, view: MessageHistoryView, if case let .replyThread(replyThreadMessage) = location, view.earlierId == nil, !view.holeEarlier, !view.isLoading { loop: for entry in view.additionalData { switch entry { - case let .message(id, messages) where id == replyThreadMessage.messageId: + case let .message(id, messages) where id == replyThreadMessage.effectiveTopId: if !messages.isEmpty { let selection: ChatHistoryMessageSelection = .none diff --git a/submodules/TelegramUI/Sources/ChatHistoryListNode.swift b/submodules/TelegramUI/Sources/ChatHistoryListNode.swift index 34b1ffe06f..61122e1940 100644 --- a/submodules/TelegramUI/Sources/ChatHistoryListNode.swift +++ b/submodules/TelegramUI/Sources/ChatHistoryListNode.swift @@ -18,6 +18,12 @@ import ListMessageItem import AccountContext import ChatInterfaceState +extension ChatReplyThreadMessage { + var effectiveTopId: MessageId { + return self.channelMessageId ?? self.messageId + } +} + private class ChatHistoryListSelectionRecognizer: UIPanGestureRecognizer { private let selectionGestureActivationThreshold: CGFloat = 5.0 @@ -643,7 +649,7 @@ public final class ChatHistoryListNode: ListView, ChatHistoryNode { additionalData.append(.peer(replyThreadMessage.messageId.peerId)) } - additionalData.append(.message(replyThreadMessage.messageId)) + additionalData.append(.message(replyThreadMessage.effectiveTopId)) } let currentViewVersion = Atomic(value: nil) @@ -1216,7 +1222,7 @@ public final class ChatHistoryListNode: ListView, ChatHistoryNode { if hasUnconsumedMention && !hasUnconsumedContent { messageIdsWithUnseenPersonalMention.append(message.id) } - if case let .replyThread(replyThreadMessage) = self.chatLocation, replyThreadMessage.messageId == message.id { + if case let .replyThread(replyThreadMessage) = self.chatLocation, replyThreadMessage.effectiveTopId == message.id { isTopReplyThreadMessageShownValue = true } case let .MessageGroupEntry(_, messages, _): @@ -1246,7 +1252,7 @@ public final class ChatHistoryListNode: ListView, ChatHistoryNode { if hasUnconsumedMention && !hasUnconsumedContent { messageIdsWithUnseenPersonalMention.append(message.id) } - if case let .replyThread(replyThreadMessage) = self.chatLocation, replyThreadMessage.messageId == message.id { + if case let .replyThread(replyThreadMessage) = self.chatLocation, replyThreadMessage.effectiveTopId == message.id { isTopReplyThreadMessageShownValue = true } } diff --git a/submodules/TelegramUI/Sources/ChatInterfaceStateContextMenus.swift b/submodules/TelegramUI/Sources/ChatInterfaceStateContextMenus.swift index 3a5e6be5fb..3c505b404d 100644 --- a/submodules/TelegramUI/Sources/ChatInterfaceStateContextMenus.swift +++ b/submodules/TelegramUI/Sources/ChatInterfaceStateContextMenus.swift @@ -457,7 +457,7 @@ func contextMenuForChatPresentationIntefaceState(chatPresentationInterfaceState: var isReplyThreadHead = false if case let .replyThread(replyThreadMessage) = chatPresentationInterfaceState.chatLocation { - isReplyThreadHead = messages[0].id == replyThreadMessage.messageId + isReplyThreadHead = messages[0].id == replyThreadMessage.effectiveTopId } if !isReplyThreadHead, data.canReply { diff --git a/submodules/TelegramUI/Sources/ChatMessageAnimatedStickerItemNode.swift b/submodules/TelegramUI/Sources/ChatMessageAnimatedStickerItemNode.swift index b6701149c9..2e9989b61e 100644 --- a/submodules/TelegramUI/Sources/ChatMessageAnimatedStickerItemNode.swift +++ b/submodules/TelegramUI/Sources/ChatMessageAnimatedStickerItemNode.swift @@ -55,7 +55,7 @@ class ChatMessageShareButton: HighlightableButtonNode { fatalError("init(coder:) has not been implemented") } - func update(presentationData: ChatPresentationData, message: Message, account: Account) -> CGSize { + func update(presentationData: ChatPresentationData, chatLocation: ChatLocation, message: Message, account: Account) -> CGSize { var isReplies = false var replyCount = 0 if let channel = message.peers[message.id.peerId] as? TelegramChannel, case .broadcast = channel.info { @@ -67,6 +67,10 @@ class ChatMessageShareButton: HighlightableButtonNode { } } } + if case let .replyThread(replyThreadMessage) = chatLocation, replyThreadMessage.effectiveTopId == message.id { + replyCount = 0 + isReplies = false + } if self.theme !== presentationData.theme.theme || self.isReplies != isReplies { self.theme = presentationData.theme.theme @@ -569,7 +573,7 @@ class ChatMessageAnimatedStickerItemNode: ChatMessageItemView { isBroadcastChannel = true } - if replyThreadMessage.isChannelPost, replyThreadMessage.messageId == item.message.id { + if replyThreadMessage.isChannelPost, replyThreadMessage.effectiveTopId == item.message.id { isBroadcastChannel = true } @@ -925,7 +929,7 @@ class ChatMessageAnimatedStickerItemNode: ChatMessageItemView { strongSelf.addSubnode(updatedShareButtonNode) updatedShareButtonNode.addTarget(strongSelf, action: #selector(strongSelf.shareButtonPressed), forControlEvents: .touchUpInside) } - let buttonSize = updatedShareButtonNode.update(presentationData: item.presentationData, message: item.message, account: item.context.account) + let buttonSize = updatedShareButtonNode.update(presentationData: item.presentationData, chatLocation: item.chatLocation, message: item.message, account: item.context.account) updatedShareButtonNode.frame = CGRect(origin: CGPoint(x: updatedImageFrame.maxX + 8.0, y: updatedImageFrame.maxY - buttonSize.height - 4.0), size: buttonSize) } else if let shareButtonNode = strongSelf.shareButtonNode { shareButtonNode.removeFromSupernode() @@ -1361,7 +1365,7 @@ class ChatMessageAnimatedStickerItemNode: ChatMessageItemView { return } - if case let .replyThread(replyThreadMessage) = item.chatLocation, replyThreadMessage.messageId == item.message.id { + if case let .replyThread(replyThreadMessage) = item.chatLocation, replyThreadMessage.effectiveTopId == item.message.id { return } diff --git a/submodules/TelegramUI/Sources/ChatMessageBubbleItemNode.swift b/submodules/TelegramUI/Sources/ChatMessageBubbleItemNode.swift index 81284841e8..d504d675e3 100644 --- a/submodules/TelegramUI/Sources/ChatMessageBubbleItemNode.swift +++ b/submodules/TelegramUI/Sources/ChatMessageBubbleItemNode.swift @@ -144,6 +144,9 @@ private func contentNodeMessagesAndClassesForItem(_ item: ChatMessageItem) -> [( if let channel = firstMessage.peers[firstMessage.id.peerId] as? TelegramChannel, case let .broadcast(info) = channel.info, info.flags.contains(.hasDiscussionGroup) { hasDiscussion = true } + if case let .replyThread(replyThreadMessage) = item.chatLocation, replyThreadMessage.effectiveTopId == firstMessage.id { + hasDiscussion = false + } if hasDiscussion { var canComment = false @@ -879,7 +882,7 @@ class ChatMessageBubbleItemNode: ChatMessageItemView, ChatMessagePrevewItemNode allowFullWidth = true } - if case let .replyThread(replyThreadMessage) = item.chatLocation, replyThreadMessage.isChannelPost, replyThreadMessage.messageId == firstMessage.id { + if case let .replyThread(replyThreadMessage) = item.chatLocation, replyThreadMessage.isChannelPost, replyThreadMessage.effectiveTopId == firstMessage.id { isBroadcastChannel = true } @@ -906,7 +909,7 @@ class ChatMessageBubbleItemNode: ChatMessageItemView, ChatMessagePrevewItemNode let isFailed = item.content.firstMessage.effectivelyFailed(timestamp: item.context.account.network.getApproximateRemoteTimestamp()) var needShareButton = false - if case let .replyThread(replyThreadMessage) = item.chatLocation, replyThreadMessage.messageId == item.message.id { + if case let .replyThread(replyThreadMessage) = item.chatLocation, replyThreadMessage.effectiveTopId == item.message.id { needShareButton = false allowFullWidth = true } else if isFailed || Namespaces.Message.allScheduled.contains(item.message.id.namespace) { @@ -2955,7 +2958,7 @@ class ChatMessageBubbleItemNode: ChatMessageItemView, ChatMessagePrevewItemNode default: break } - if case let .replyThread(replyThreadMessage) = item.chatLocation, replyThreadMessage.messageId == item.message.id { + if case let .replyThread(replyThreadMessage) = item.chatLocation, replyThreadMessage.effectiveTopId == item.message.id { canHaveSelection = false } diff --git a/submodules/TelegramUI/Sources/ChatMessageInstantVideoItemNode.swift b/submodules/TelegramUI/Sources/ChatMessageInstantVideoItemNode.swift index 49b7868aa3..0c2df5028c 100644 --- a/submodules/TelegramUI/Sources/ChatMessageInstantVideoItemNode.swift +++ b/submodules/TelegramUI/Sources/ChatMessageInstantVideoItemNode.swift @@ -194,7 +194,7 @@ class ChatMessageInstantVideoItemNode: ChatMessageItemView { isBroadcastChannel = true } - if case let .replyThread(replyThreadMessage) = item.chatLocation, replyThreadMessage.isChannelPost, replyThreadMessage.messageId == item.message.id { + if case let .replyThread(replyThreadMessage) = item.chatLocation, replyThreadMessage.isChannelPost, replyThreadMessage.effectiveTopId == item.message.id { isBroadcastChannel = true } @@ -473,7 +473,7 @@ class ChatMessageInstantVideoItemNode: ChatMessageItemView { strongSelf.addSubnode(updatedShareButtonNode) updatedShareButtonNode.addTarget(strongSelf, action: #selector(strongSelf.shareButtonPressed), forControlEvents: .touchUpInside) } - let buttonSize = updatedShareButtonNode.update(presentationData: item.presentationData, message: item.message, account: item.context.account) + let buttonSize = updatedShareButtonNode.update(presentationData: item.presentationData, chatLocation: item.chatLocation, message: item.message, account: item.context.account) updatedShareButtonNode.frame = CGRect(origin: CGPoint(x: videoFrame.maxX - 7.0, y: videoFrame.maxY - 24.0 - buttonSize.height), size: buttonSize) } else if let shareButtonNode = strongSelf.shareButtonNode { shareButtonNode.removeFromSupernode() @@ -858,7 +858,7 @@ class ChatMessageInstantVideoItemNode: ChatMessageItemView { return } - if case let .replyThread(replyThreadMessage) = item.chatLocation, replyThreadMessage.messageId == item.message.id { + if case let .replyThread(replyThreadMessage) = item.chatLocation, replyThreadMessage.effectiveTopId == item.message.id { return } diff --git a/submodules/TelegramUI/Sources/ChatMessageInteractiveFileNode.swift b/submodules/TelegramUI/Sources/ChatMessageInteractiveFileNode.swift index 33f2ac521e..07fac2f234 100644 --- a/submodules/TelegramUI/Sources/ChatMessageInteractiveFileNode.swift +++ b/submodules/TelegramUI/Sources/ChatMessageInteractiveFileNode.swift @@ -277,7 +277,11 @@ final class ChatMessageInteractiveFileNode: ASDisplayNode { var consumableContentIcon: UIImage? for attribute in message.attributes { if let attribute = attribute as? ConsumableContentMessageAttribute { - if !attribute.consumed { + var isConsumed = attribute.consumed + if let channel = message.peers[message.id.peerId] as? TelegramChannel, case .broadcast = channel.info { + isConsumed = true + } + if !isConsumed { if incoming { consumableContentIcon = PresentationResourcesChat.chatBubbleConsumableContentIncomingIcon(presentationData.theme.theme) } else { diff --git a/submodules/TelegramUI/Sources/ChatMessageItem.swift b/submodules/TelegramUI/Sources/ChatMessageItem.swift index cda6679a83..05af4b17d5 100644 --- a/submodules/TelegramUI/Sources/ChatMessageItem.swift +++ b/submodules/TelegramUI/Sources/ChatMessageItem.swift @@ -327,7 +327,7 @@ public final class ChatMessageItem: ListViewItem, CustomStringConvertible { if let peer = message.peers[message.id.peerId] as? TelegramChannel, case .broadcast = peer.info { isBroadcastChannel = true } - } else if case let .replyThread(replyThreadMessage) = chatLocation, replyThreadMessage.isChannelPost, replyThreadMessage.messageId == message.id { + } else if case let .replyThread(replyThreadMessage) = chatLocation, replyThreadMessage.isChannelPost, replyThreadMessage.effectiveTopId == message.id { isBroadcastChannel = true } if !hasActionMedia && !isBroadcastChannel { diff --git a/submodules/TelegramUI/Sources/ChatMessageStickerItemNode.swift b/submodules/TelegramUI/Sources/ChatMessageStickerItemNode.swift index 25b0a27f45..4daef162c5 100644 --- a/submodules/TelegramUI/Sources/ChatMessageStickerItemNode.swift +++ b/submodules/TelegramUI/Sources/ChatMessageStickerItemNode.swift @@ -257,7 +257,7 @@ class ChatMessageStickerItemNode: ChatMessageItemView { isBroadcastChannel = true } - if replyThreadMessage.isChannelPost, replyThreadMessage.messageId == item.message.id { + if replyThreadMessage.isChannelPost, replyThreadMessage.effectiveTopId == item.message.id { isBroadcastChannel = true } @@ -568,7 +568,7 @@ class ChatMessageStickerItemNode: ChatMessageItemView { strongSelf.addSubnode(updatedShareButtonNode) updatedShareButtonNode.addTarget(strongSelf, action: #selector(strongSelf.shareButtonPressed), forControlEvents: .touchUpInside) } - let buttonSize = updatedShareButtonNode.update(presentationData: item.presentationData, message: item.message, account: item.context.account) + let buttonSize = updatedShareButtonNode.update(presentationData: item.presentationData, chatLocation: item.chatLocation, message: item.message, account: item.context.account) let shareButtonFrame = CGRect(origin: CGPoint(x: baseShareButtonFrame.minX, y: baseShareButtonFrame.maxY - buttonSize.height), size: buttonSize) transition.updateFrame(node: updatedShareButtonNode, frame: shareButtonFrame) } else if let shareButtonNode = strongSelf.shareButtonNode { @@ -922,7 +922,7 @@ class ChatMessageStickerItemNode: ChatMessageItemView { return } - if case let .replyThread(replyThreadMessage) = item.chatLocation, replyThreadMessage.messageId == item.message.id { + if case let .replyThread(replyThreadMessage) = item.chatLocation, replyThreadMessage.effectiveTopId == item.message.id { return } diff --git a/submodules/TelegramUI/Sources/ChatTitleView.swift b/submodules/TelegramUI/Sources/ChatTitleView.swift index 3baf18915c..a3a0e99ec4 100644 --- a/submodules/TelegramUI/Sources/ChatTitleView.swift +++ b/submodules/TelegramUI/Sources/ChatTitleView.swift @@ -456,7 +456,12 @@ final class ChatTitleView: UIView, NavigationBarTitleView { var accessibilityText = "" for segment in self.titleNode.segments { - accessibilityText.append(segment.attributedText.string) + switch segment { + case let .number(_, string): + accessibilityText.append(string.string) + case let .text(_, string): + accessibilityText.append(string.string) + } } self.accessibilityLabel = accessibilityText diff --git a/submodules/TgVoipWebrtc/tgcalls b/submodules/TgVoipWebrtc/tgcalls index abf983bf49..64f96a1b4f 160000 --- a/submodules/TgVoipWebrtc/tgcalls +++ b/submodules/TgVoipWebrtc/tgcalls @@ -1 +1 @@ -Subproject commit abf983bf498ed0ddbdc3a4e2326b218f62a69d0c +Subproject commit 64f96a1b4fcfb8afdb0fb7749082cb42cdad7901 diff --git a/submodules/WalletUI/Resources/WalletStrings.mapping b/submodules/WalletUI/Resources/WalletStrings.mapping index 17cc3a5663f90f1755dec9124d0cbe37c00f5e0b..0f39866777c67e74b19a01f779b9a0361509e1f3 100644 GIT binary patch delta 17 ZcmaFn_{?#`Duu}>6=WG1Cofl!0{}_;2HXGu delta 17 ZcmaFn_{?#`Duv0X6{Hy%Cofk}002q>2HpSw diff --git a/submodules/WalletUI/Sources/WalletStrings.swift b/submodules/WalletUI/Sources/WalletStrings.swift index ce409636d3..b5d79e61f2 100644 --- a/submodules/WalletUI/Sources/WalletStrings.swift +++ b/submodules/WalletUI/Sources/WalletStrings.swift @@ -449,12 +449,12 @@ public final class WalletStrings: Equatable { public var Wallet_Send_ConfirmationConfirm: String { return self._s[218]! } public var Wallet_Created_ExportErrorTitle: String { return self._s[219]! } public var Wallet_Info_TransactionPendingHeader: String { return self._s[220]! } - public func Wallet_Updated_HoursAgo(_ value: Int32) -> String { + public func Wallet_Updated_MinutesAgo(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = walletStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[0 * 6 + Int(form.rawValue)]!, stringValue) } - public func Wallet_Updated_MinutesAgo(_ value: Int32) -> String { + public func Wallet_Updated_HoursAgo(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = walletStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[1 * 6 + Int(form.rawValue)]!, stringValue)