diff --git a/Makefile b/Makefile index 625c56dc0f..db4f5cdcf8 100644 --- a/Makefile +++ b/Makefile @@ -3,7 +3,7 @@ include Utils.makefile -APP_VERSION="7.1" +APP_VERSION="7.1.1" CORE_COUNT=$(shell sysctl -n hw.logicalcpu) CORE_COUNT_MINUS_ONE=$(shell expr ${CORE_COUNT} \- 1) diff --git a/Telegram/NotificationService/Serialization.m b/Telegram/NotificationService/Serialization.m index f137bbe5df..cce25b19cc 100644 --- a/Telegram/NotificationService/Serialization.m +++ b/Telegram/NotificationService/Serialization.m @@ -3,7 +3,7 @@ @implementation Serialization - (NSUInteger)currentLayer { - return 119; + return 120; } - (id _Nullable)parseMessage:(NSData * _Nullable)data { diff --git a/Telegram/Telegram-iOS/en.lproj/Localizable.strings b/Telegram/Telegram-iOS/en.lproj/Localizable.strings index 8d50dadb19..ec845feb11 100644 --- a/Telegram/Telegram-iOS/en.lproj/Localizable.strings +++ b/Telegram/Telegram-iOS/en.lproj/Localizable.strings @@ -1921,6 +1921,7 @@ "Conversation.Unpin" = "Unpin"; "Conversation.Report" = "Report Spam"; "Conversation.PinnedMessage" = "Pinned Message"; +"Conversation.PinnedPreviousMessage" = "Previous Message"; "Conversation.Moderate.Delete" = "Delete Message"; "Conversation.Moderate.Ban" = "Ban User"; diff --git a/build-system/xcode_version b/build-system/xcode_version index 8204473ef6..b700dc1d47 100644 --- a/build-system/xcode_version +++ b/build-system/xcode_version @@ -1 +1 @@ -11.5 +12.0.1 diff --git a/buildbox/build-telegram.sh b/buildbox/build-telegram.sh index c5afe51b13..d7acc5af35 100644 --- a/buildbox/build-telegram.sh +++ b/buildbox/build-telegram.sh @@ -5,7 +5,7 @@ set -e BUILD_TELEGRAM_VERSION="1" MACOS_VERSION="10.15" -XCODE_VERSION="11.5" +XCODE_VERSION="12.0.1" GUEST_SHELL="bash" VM_BASE_NAME="macos$(echo $MACOS_VERSION | sed -e 's/\.'/_/g)_Xcode$(echo $XCODE_VERSION | sed -e 's/\.'/_/g)" diff --git a/submodules/LegacyMediaPickerUI/Sources/LegacySuggestionContext.swift b/submodules/LegacyMediaPickerUI/Sources/LegacySuggestionContext.swift index 4580ff3d45..ab405bf084 100644 --- a/submodules/LegacyMediaPickerUI/Sources/LegacySuggestionContext.swift +++ b/submodules/LegacyMediaPickerUI/Sources/LegacySuggestionContext.swift @@ -14,7 +14,7 @@ public func legacySuggestionContext(context: AccountContext, peerId: PeerId, cha suggestionContext.userListSignal = { query in return SSignal { subscriber in if let query = query { - let disposable = searchPeerMembers(context: context, peerId: peerId, chatLocation: chatLocation, query: query).start(next: { peers in + let disposable = searchPeerMembers(context: context, peerId: peerId, chatLocation: chatLocation, query: query, scope: .mention).start(next: { peers in let users = NSMutableArray() for peer in peers { let user = TGUser() diff --git a/submodules/MtProtoKit/Sources/MTDatacenterAuthAction.m b/submodules/MtProtoKit/Sources/MTDatacenterAuthAction.m index 736b69f546..1a36bbeecc 100644 --- a/submodules/MtProtoKit/Sources/MTDatacenterAuthAction.m +++ b/submodules/MtProtoKit/Sources/MTDatacenterAuthAction.m @@ -180,7 +180,6 @@ - (void)cancel { [self cleanup]; - [self fail]; } - (void)complete { diff --git a/submodules/MtProtoKit/Sources/MTDatacenterAuthMessageService.m b/submodules/MtProtoKit/Sources/MTDatacenterAuthMessageService.m index 22aaf5d07d..da1ca4e98a 100644 --- a/submodules/MtProtoKit/Sources/MTDatacenterAuthMessageService.m +++ b/submodules/MtProtoKit/Sources/MTDatacenterAuthMessageService.m @@ -109,9 +109,9 @@ static NSDictionary *selectPublicKey(NSArray *fingerprints, NSArray _encryptionProvider; bool _tempAuth; - MTSessionInfo *_sessionInfo; MTDatacenterAuthStage _stage; int64_t _currentStageMessageId; @@ -165,7 +164,6 @@ typedef enum { { _encryptionProvider = context.encryptionProvider; _tempAuth = tempAuth; - _sessionInfo = [[MTSessionInfo alloc] initWithRandomSessionIdAndContext:context]; } return self; } @@ -267,7 +265,7 @@ typedef enum { [reqDhBuffer appendInt64:_dhPublicKeyFingerprint]; [reqDhBuffer appendTLBytes:_dhEncryptedData]; - NSString *messageDescription = [NSString stringWithFormat:@"reqDh nonce:%@ serverNonce:%@ p:%@ q:%@ fingerprint:%llx", _nonce, _serverNonce, _dhP, _dhQ, _dhPublicKeyFingerprint]; + NSString *messageDescription = [NSString stringWithFormat:@"reqDh nonce:%@ serverNonce:%@ p:%@ q:%@ fingerprint:%llx dhEncryptedData:%d bytes", _nonce, _serverNonce, _dhP, _dhQ, _dhPublicKeyFingerprint, (int)_dhEncryptedData.length]; MTOutgoingMessage *message = [[MTOutgoingMessage alloc] initWithData:reqDhBuffer.data metadata:messageDescription additionalDebugDescription:nil shortMetadata:messageDescription messageId:_currentStageMessageId messageSeqNo:_currentStageMessageSeqNo]; return [[MTMessageTransaction alloc] initWithMessagePayload:@[message] prepared:nil failed:nil completion:^(NSDictionary *messageInternalIdToTransactionId, NSDictionary *messageInternalIdToPreparedMessage, __unused NSDictionary *messageInternalIdToQuickAckId) { @@ -402,12 +400,10 @@ 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); + MTLog(@"[MTDatacenterAuthMessageService#%p encryptedData length %d dataWithHash length %d]", self, (int)encryptedData.length, (int)dataWithHash.length); } if (encryptedData.length < 256) { @@ -447,8 +443,11 @@ typedef enum { arc4random_buf(&random, 1); [dataWithHash appendBytes:&random length:1]; } - + NSData *encryptedData = MTRsaEncrypt(_encryptionProvider, [publicKey objectForKey:@"key"], dataWithHash); + if (MTLogEnabled()) { + MTLog(@"[MTDatacenterAuthMessageService#%p encryptedData length %d dataWithHash length %d]", self, (int)encryptedData.length, (int)dataWithHash.length); + } if (encryptedData.length < 256) { NSMutableData *newEncryptedData = [[NSMutableData alloc] init]; diff --git a/submodules/MtProtoKit/Sources/MTEncryption.m b/submodules/MtProtoKit/Sources/MTEncryption.m index 4df030344c..348e3065a3 100644 --- a/submodules/MtProtoKit/Sources/MTEncryption.m +++ b/submodules/MtProtoKit/Sources/MTEncryption.m @@ -292,12 +292,13 @@ NSData *MTAesDecrypt(NSData *data, NSData *key, NSData *iv) NSData *MTRsaEncrypt(id provider, NSString *publicKey, NSData *data) { #if TARGET_OS_IOS - NSMutableData *updatedData = [[NSMutableData alloc] initWithData:data]; + return [provider rsaEncryptWithPublicKey:publicKey data:data]; + /*NSMutableData *updatedData = [[NSMutableData alloc] initWithData:data]; while (updatedData.length < 256) { uint8_t zero = 0; [updatedData replaceBytesInRange:NSMakeRange(0, 0) withBytes:&zero length:1]; } - return [MTRsa encryptData:updatedData publicKey:publicKey]; + return [MTRsa encryptData:updatedData publicKey:publicKey];*/ #else return [provider macosRSAEncrypt:publicKey data:data]; #endif diff --git a/submodules/MtProtoKit/Sources/MTProto.m b/submodules/MtProtoKit/Sources/MTProto.m index 62e23fff8b..c0c1d8177b 100644 --- a/submodules/MtProtoKit/Sources/MTProto.m +++ b/submodules/MtProtoKit/Sources/MTProto.m @@ -1726,8 +1726,13 @@ static const NSUInteger MTMaxUnacknowledgedMessageCount = 64; { [[MTProto managerQueue] dispatchOnQueue:^ { - if (transport != _transport || completion == nil) + if (transport != _transport || completion == nil) { return; + } + + if (_useUnauthorizedMode) { + return; + } MTDatacenterAuthKey *authKey = [self getAuthKeyForCurrentScheme:scheme createIfNeeded:false authInfoSelector:nil]; if (authKey == nil) { @@ -2038,11 +2043,18 @@ static NSString *dumpHexString(NSData *data, int maxLength) { - (void)handleMissingKey:(MTTransportScheme *)scheme { NSAssert([[MTProto managerQueue] isCurrentQueue], @"invalid queue"); + if (_useUnauthorizedMode) { + if (MTLogEnabled()) { + MTLog(@"[MTProto#%p@%p don't handleMissingKey when useUnauthorizedMode]", self, _context); + } + return; + } + MTDatacenterAuthInfoSelector authInfoSelector; [self getAuthKeyForCurrentScheme:scheme createIfNeeded:false authInfoSelector:&authInfoSelector]; if (MTLogEnabled()) { - MTLog(@"[MTProto#%p@%p missing key %lld selector]", self, _context, _validAuthInfo.authInfo.authKeyId, authInfoSelector); + MTLog(@"[MTProto#%p@%p missing key %lld selector %d]", self, _context, _validAuthInfo.authInfo.authKeyId, authInfoSelector); } if (_useExplicitAuthKey != nil) { @@ -2618,7 +2630,7 @@ static NSString *dumpHexString(NSData *data, int maxLength) { { [_context setGlobalTimeDifference:timeDifference]; - if (saltList != nil) + if (!_useUnauthorizedMode && saltList != nil) { if (_useExplicitAuthKey) { if (_validAuthInfo != nil && _validAuthInfo.selector == authInfoSelector) { diff --git a/submodules/PeerInfoUI/Sources/ChannelDiscussionGroupSetupController.swift b/submodules/PeerInfoUI/Sources/ChannelDiscussionGroupSetupController.swift index 3e8231b162..7ffe6a614b 100644 --- a/submodules/PeerInfoUI/Sources/ChannelDiscussionGroupSetupController.swift +++ b/submodules/PeerInfoUI/Sources/ChannelDiscussionGroupSetupController.swift @@ -560,9 +560,15 @@ public func channelDiscussionGroupSetupController(context: AccountContext, peerI var isEmptyState = false var displayGroupList = false if let cachedData = view.cachedData as? CachedChannelData { - let isEmpty = cachedData.linkedDiscussionPeerId == nil + var isEmpty = true + switch cachedData.linkedDiscussionPeerId { + case .unknown: + isEmpty = true + case let .known(value): + isEmpty = value == nil + } if let peer = view.peers[view.peerId] as? TelegramChannel, case .broadcast = peer.info { - if cachedData.linkedDiscussionPeerId == nil { + if isEmpty { if groups == nil { isEmptyState = true } else { @@ -570,13 +576,13 @@ public func channelDiscussionGroupSetupController(context: AccountContext, peerI } } } - if let wasEmpty = wasEmpty, wasEmpty != isEmpty { - crossfade = true - } - wasEmpty = isEmpty } else { isEmptyState = true } + if let wasEmpty = wasEmpty, wasEmpty != isEmptyState { + crossfade = true + } + wasEmpty = isEmptyState var emptyStateItem: ItemListControllerEmptyStateItem? if isEmptyState { diff --git a/submodules/SearchPeerMembers/Sources/SearchPeerMembers.swift b/submodules/SearchPeerMembers/Sources/SearchPeerMembers.swift index a7b38b0465..05c001fd06 100644 --- a/submodules/SearchPeerMembers/Sources/SearchPeerMembers.swift +++ b/submodules/SearchPeerMembers/Sources/SearchPeerMembers.swift @@ -5,20 +5,23 @@ import SyncCore import SwiftSignalKit import AccountContext -public func searchPeerMembers(context: AccountContext, peerId: PeerId, chatLocation: ChatLocation, query: String) -> Signal<[Peer], NoError> { - if case .replyThread = chatLocation { - return .single([]) - } else if peerId.namespace == Namespaces.Peer.CloudChannel { +public enum SearchPeerMembersScope { + case memberSuggestion + case mention +} + +public func searchPeerMembers(context: AccountContext, peerId: PeerId, chatLocation: ChatLocation, query: String, scope: SearchPeerMembersScope) -> Signal<[Peer], NoError> { + if peerId.namespace == Namespaces.Peer.CloudChannel { return context.account.postbox.transaction { transaction -> CachedChannelData? in return transaction.getPeerCachedData(peerId: peerId) as? CachedChannelData } - |> mapToSignal { cachedData -> Signal<[Peer], NoError> in - if let cachedData = cachedData, let memberCount = cachedData.participantsSummary.memberCount, memberCount <= 64 { + |> mapToSignal { cachedData -> Signal<([Peer], Bool), NoError> in + if case .peer = chatLocation, let cachedData = cachedData, let memberCount = cachedData.participantsSummary.memberCount, memberCount <= 64 { return Signal { subscriber in let (disposable, _) = context.peerChannelMemberCategoriesContextsManager.recent(postbox: context.account.postbox, network: context.account.network, accountPeerId: context.account.peerId, peerId: peerId, searchQuery: nil, requestUpdate: false, updated: { state in if case .ready = state.loadingState { let normalizedQuery = query.lowercased() - subscriber.putNext(state.list.compactMap { participant -> Peer? in + subscriber.putNext((state.list.compactMap { participant -> Peer? in if participant.peer.isDeleted { return nil } @@ -37,7 +40,7 @@ public func searchPeerMembers(context: AccountContext, peerId: PeerId, chatLocat return nil } - }) + }, true)) } }) @@ -49,22 +52,70 @@ public func searchPeerMembers(context: AccountContext, peerId: PeerId, chatLocat } return Signal { subscriber in - let (disposable, _) = context.peerChannelMemberCategoriesContextsManager.recent(postbox: context.account.postbox, network: context.account.network, accountPeerId: context.account.peerId, peerId: peerId, searchQuery: query.isEmpty ? nil : query, updated: { state in - if case .ready = state.loadingState { - subscriber.putNext(state.list.compactMap { participant in - if participant.peer.isDeleted { - return nil - } - return participant.peer - }) + switch chatLocation { + case let .peer(peerId): + let (disposable, _) = context.peerChannelMemberCategoriesContextsManager.recent(postbox: context.account.postbox, network: context.account.network, accountPeerId: context.account.peerId, peerId: peerId, searchQuery: query.isEmpty ? nil : query, updated: { state in + if case .ready = state.loadingState { + subscriber.putNext((state.list.compactMap { participant in + if participant.peer.isDeleted { + return nil + } + return participant.peer + }, true)) + } + }) + + return ActionDisposable { + disposable.dispose() + } + case let .replyThread(replyThreadMessage): + let (disposable, _) = context.peerChannelMemberCategoriesContextsManager.mentions(postbox: context.account.postbox, network: context.account.network, accountPeerId: context.account.peerId, peerId: peerId, threadMessageId: replyThreadMessage.messageId, searchQuery: query.isEmpty ? nil : query, updated: { state in + if case .ready = state.loadingState { + subscriber.putNext((state.list.compactMap { participant in + if participant.peer.isDeleted { + return nil + } + return participant.peer + }, true)) + } + }) + + return ActionDisposable { + disposable.dispose() } - }) - - return ActionDisposable { - disposable.dispose() } } |> runOn(Queue.mainQueue()) } + |> mapToSignal { result, isReady -> Signal<[Peer], NoError> in + switch scope { + case .mention: + return .single(result) + case .memberSuggestion: + return context.account.postbox.transaction { transaction -> [Peer] in + var result = result + let normalizedQuery = query.lowercased() + if isReady { + if let channel = transaction.getPeer(peerId) as? TelegramChannel, case .group = channel.info { + var matches = false + if normalizedQuery.isEmpty { + matches = true + } else { + if channel.indexName.matchesByTokens(normalizedQuery) { + matches = true + } + if let addressName = channel.addressName, addressName.lowercased().hasPrefix(normalizedQuery) { + matches = true + } + } + if matches { + result.insert(channel, at: 0) + } + } + } + return result + } + } + } } else { return searchGroupMembers(postbox: context.account.postbox, network: context.account.network, accountPeerId: context.account.peerId, peerId: peerId, query: query) } diff --git a/submodules/SyncCore/Sources/NetworkSettings.swift b/submodules/SyncCore/Sources/NetworkSettings.swift index b8341c79fb..94d17222eb 100644 --- a/submodules/SyncCore/Sources/NetworkSettings.swift +++ b/submodules/SyncCore/Sources/NetworkSettings.swift @@ -4,21 +4,27 @@ public struct NetworkSettings: PreferencesEntry, Equatable { public var reducedBackupDiscoveryTimeout: Bool public var applicationUpdateUrlPrefix: String? public var backupHostOverride: String? + public var defaultEnableTempKeys: Bool + public var userEnableTempKeys: Bool? public static var defaultSettings: NetworkSettings { - return NetworkSettings(reducedBackupDiscoveryTimeout: false, applicationUpdateUrlPrefix: nil, backupHostOverride: nil) + return NetworkSettings(reducedBackupDiscoveryTimeout: false, applicationUpdateUrlPrefix: nil, backupHostOverride: nil, defaultEnableTempKeys: false, userEnableTempKeys: nil) } - public init(reducedBackupDiscoveryTimeout: Bool, applicationUpdateUrlPrefix: String?, backupHostOverride: String?) { + public init(reducedBackupDiscoveryTimeout: Bool, applicationUpdateUrlPrefix: String?, backupHostOverride: String?, defaultEnableTempKeys: Bool, userEnableTempKeys: Bool?) { self.reducedBackupDiscoveryTimeout = reducedBackupDiscoveryTimeout self.applicationUpdateUrlPrefix = applicationUpdateUrlPrefix self.backupHostOverride = backupHostOverride + self.defaultEnableTempKeys = defaultEnableTempKeys + self.userEnableTempKeys = userEnableTempKeys } public init(decoder: PostboxDecoder) { self.reducedBackupDiscoveryTimeout = decoder.decodeInt32ForKey("reducedBackupDiscoveryTimeout", orElse: 0) != 0 self.applicationUpdateUrlPrefix = decoder.decodeOptionalStringForKey("applicationUpdateUrlPrefix") self.backupHostOverride = decoder.decodeOptionalStringForKey("backupHostOverride") + self.defaultEnableTempKeys = decoder.decodeBoolForKey("defaultEnableTempKeys", orElse: false) + self.userEnableTempKeys = decoder.decodeOptionalBoolForKey("userEnableTempKeys") } public func encode(_ encoder: PostboxEncoder) { @@ -33,6 +39,12 @@ public struct NetworkSettings: PreferencesEntry, Equatable { } else { encoder.encodeNil(forKey: "backupHostOverride") } + encoder.encodeBool(self.defaultEnableTempKeys, forKey: "defaultEnableTempKeys") + if let userEnableTempKeys = self.userEnableTempKeys { + encoder.encodeBool(userEnableTempKeys, forKey: "userEnableTempKeys") + } else { + encoder.encodeNil(forKey: "userEnableTempKeys") + } } public func isEqual(to: PreferencesEntry) -> Bool { diff --git a/submodules/TelegramApi/Sources/Api0.swift b/submodules/TelegramApi/Sources/Api0.swift index 8a137c3a69..874ebaa025 100644 --- a/submodules/TelegramApi/Sources/Api0.swift +++ b/submodules/TelegramApi/Sources/Api0.swift @@ -322,6 +322,7 @@ fileprivate let parsers: [Int32 : (BufferReader) -> Any?] = { dict[106343499] = { return Api.ChannelParticipantsFilter.parse_channelParticipantsSearch($0) } dict[-1548400251] = { return Api.ChannelParticipantsFilter.parse_channelParticipantsKicked($0) } dict[-1150621555] = { return Api.ChannelParticipantsFilter.parse_channelParticipantsContacts($0) } + dict[-531931925] = { return Api.ChannelParticipantsFilter.parse_channelParticipantsMentions($0) } dict[-350980120] = { return Api.WebPage.parse_webPageEmpty($0) } dict[-981018084] = { return Api.WebPage.parse_webPagePending($0) } dict[-392411726] = { return Api.WebPage.parse_webPage($0) } diff --git a/submodules/TelegramApi/Sources/Api1.swift b/submodules/TelegramApi/Sources/Api1.swift index 5a1cdb630c..1dd38eed77 100644 --- a/submodules/TelegramApi/Sources/Api1.swift +++ b/submodules/TelegramApi/Sources/Api1.swift @@ -9991,6 +9991,7 @@ public extension Api { case channelParticipantsSearch(q: String) case channelParticipantsKicked(q: String) case channelParticipantsContacts(q: String) + case channelParticipantsMentions(flags: Int32, q: String?, topMsgId: Int32?) public func serialize(_ buffer: Buffer, _ boxed: Swift.Bool) { switch self { @@ -10036,6 +10037,14 @@ public extension Api { } serializeString(q, buffer: buffer, boxed: false) break + case .channelParticipantsMentions(let flags, let q, let topMsgId): + if boxed { + buffer.appendInt32(-531931925) + } + serializeInt32(flags, buffer: buffer, boxed: false) + if Int(flags) & Int(1 << 0) != 0 {serializeString(q!, buffer: buffer, boxed: false)} + if Int(flags) & Int(1 << 1) != 0 {serializeInt32(topMsgId!, buffer: buffer, boxed: false)} + break } } @@ -10055,6 +10064,8 @@ public extension Api { return ("channelParticipantsKicked", [("q", q)]) case .channelParticipantsContacts(let q): return ("channelParticipantsContacts", [("q", q)]) + case .channelParticipantsMentions(let flags, let q, let topMsgId): + return ("channelParticipantsMentions", [("flags", flags), ("q", q), ("topMsgId", topMsgId)]) } } @@ -10111,6 +10122,23 @@ public extension Api { return nil } } + public static func parse_channelParticipantsMentions(_ reader: BufferReader) -> ChannelParticipantsFilter? { + var _1: Int32? + _1 = reader.readInt32() + var _2: String? + if Int(_1!) & Int(1 << 0) != 0 {_2 = parseString(reader) } + var _3: Int32? + if Int(_1!) & Int(1 << 1) != 0 {_3 = reader.readInt32() } + let _c1 = _1 != nil + let _c2 = (Int(_1!) & Int(1 << 0) == 0) || _2 != nil + let _c3 = (Int(_1!) & Int(1 << 1) == 0) || _3 != nil + if _c1 && _c2 && _c3 { + return Api.ChannelParticipantsFilter.channelParticipantsMentions(flags: _1!, q: _2, topMsgId: _3) + } + else { + return nil + } + } } public enum WebPage: TypeConstructorDescription { diff --git a/submodules/TelegramApi/Sources/Api3.swift b/submodules/TelegramApi/Sources/Api3.swift index 330dc0faa3..e258ce144b 100644 --- a/submodules/TelegramApi/Sources/Api3.swift +++ b/submodules/TelegramApi/Sources/Api3.swift @@ -3737,9 +3737,26 @@ public extension Api { }) } - public static func search(flags: Int32, peer: Api.InputPeer, q: String, fromId: Api.InputUser?, topMsgId: Int32?, filter: Api.MessagesFilter, minDate: Int32, maxDate: Int32, offsetId: Int32, addOffset: Int32, limit: Int32, maxId: Int32, minId: Int32, hash: Int32) -> (FunctionDescription, Buffer, DeserializeFunctionResponse) { + public static func setTyping(flags: Int32, peer: Api.InputPeer, topMsgId: Int32?, action: Api.SendMessageAction) -> (FunctionDescription, Buffer, DeserializeFunctionResponse) { let buffer = Buffer() - buffer.appendInt32(1310163211) + buffer.appendInt32(1486110434) + serializeInt32(flags, buffer: buffer, boxed: false) + peer.serialize(buffer, true) + if Int(flags) & Int(1 << 0) != 0 {serializeInt32(topMsgId!, buffer: buffer, boxed: false)} + action.serialize(buffer, true) + return (FunctionDescription(name: "messages.setTyping", parameters: [("flags", flags), ("peer", peer), ("topMsgId", topMsgId), ("action", action)]), buffer, DeserializeFunctionResponse { (buffer: Buffer) -> Api.Bool? in + let reader = BufferReader(buffer) + var result: Api.Bool? + if let signature = reader.readInt32() { + result = Api.parse(reader, signature: signature) as? Api.Bool + } + return result + }) + } + + public static func search(flags: Int32, peer: Api.InputPeer, q: String, fromId: Api.InputPeer?, topMsgId: Int32?, filter: Api.MessagesFilter, minDate: Int32, maxDate: Int32, offsetId: Int32, addOffset: Int32, limit: Int32, maxId: Int32, minId: Int32, hash: Int32) -> (FunctionDescription, Buffer, DeserializeFunctionResponse) { + let buffer = Buffer() + buffer.appendInt32(204812012) serializeInt32(flags, buffer: buffer, boxed: false) peer.serialize(buffer, true) serializeString(q, buffer: buffer, boxed: false) @@ -3763,23 +3780,6 @@ public extension Api { return result }) } - - public static func setTyping(flags: Int32, peer: Api.InputPeer, topMsgId: Int32?, action: Api.SendMessageAction) -> (FunctionDescription, Buffer, DeserializeFunctionResponse) { - let buffer = Buffer() - buffer.appendInt32(1486110434) - serializeInt32(flags, buffer: buffer, boxed: false) - peer.serialize(buffer, true) - if Int(flags) & Int(1 << 0) != 0 {serializeInt32(topMsgId!, buffer: buffer, boxed: false)} - action.serialize(buffer, true) - return (FunctionDescription(name: "messages.setTyping", parameters: [("flags", flags), ("peer", peer), ("topMsgId", topMsgId), ("action", action)]), buffer, DeserializeFunctionResponse { (buffer: Buffer) -> Api.Bool? in - let reader = BufferReader(buffer) - var result: Api.Bool? - if let signature = reader.readInt32() { - result = Api.parse(reader, signature: signature) as? Api.Bool - } - return result - }) - } } public struct channels { public static func readHistory(channel: Api.InputChannel, maxId: Int32) -> (FunctionDescription, Buffer, DeserializeFunctionResponse) { diff --git a/submodules/TelegramCore/Sources/ChannelMembers.swift b/submodules/TelegramCore/Sources/ChannelMembers.swift index e2bcdf9e5f..2fe9cbed67 100644 --- a/submodules/TelegramCore/Sources/ChannelMembers.swift +++ b/submodules/TelegramCore/Sources/ChannelMembers.swift @@ -18,6 +18,7 @@ public enum ChannelMembersCategory { case bots(ChannelMembersCategoryFilter) case restricted(ChannelMembersCategoryFilter) case banned(ChannelMembersCategoryFilter) + case mentions(threadId: MessageId?, filter: ChannelMembersCategoryFilter) } public func channelMembers(postbox: Postbox, network: Network, accountPeerId: PeerId, peerId: PeerId, category: ChannelMembersCategory = .recent(.all), offset: Int32 = 0, limit: Int32 = 64, hash: Int32 = 0) -> Signal<[RenderedChannelParticipant]?, NoError> { @@ -32,6 +33,24 @@ public func channelMembers(postbox: Postbox, network: Network, accountPeerId: Pe case let .search(query): apiFilter = .channelParticipantsSearch(q: query) } + case let .mentions(threadId, filter): + switch filter { + case .all: + var flags: Int32 = 0 + if threadId != nil { + flags |= 1 << 1 + } + apiFilter = .channelParticipantsMentions(flags: flags, q: nil, topMsgId: threadId?.id) + case let .search(query): + var flags: Int32 = 0 + if threadId != nil { + flags |= 1 << 1 + } + if !query.isEmpty { + flags |= 1 << 0 + } + apiFilter = .channelParticipantsMentions(flags: flags, q: query.isEmpty ? nil : query, topMsgId: threadId?.id) + } case .admins: apiFilter = .channelParticipantsAdmins case let .contacts(filter): diff --git a/submodules/TelegramCore/Sources/ManagedConfigurationUpdates.swift b/submodules/TelegramCore/Sources/ManagedConfigurationUpdates.swift index 99512d4bf1..39de484df8 100644 --- a/submodules/TelegramCore/Sources/ManagedConfigurationUpdates.swift +++ b/submodules/TelegramCore/Sources/ManagedConfigurationUpdates.swift @@ -35,10 +35,14 @@ func managedConfigurationUpdates(accountManager: AccountManager, postbox: Postbo } let blockedMode = (config.flags & 8) != 0 + + let defaultEnableTempKeys = (config.flags & (1 << 13)) != 0 + updateNetworkSettingsInteractively(transaction: transaction, network: network, { settings in var settings = settings settings.reducedBackupDiscoveryTimeout = blockedMode settings.applicationUpdateUrlPrefix = config.autoupdateUrlPrefix + settings.defaultEnableTempKeys = defaultEnableTempKeys return settings }) diff --git a/submodules/TelegramCore/Sources/Network.swift b/submodules/TelegramCore/Sources/Network.swift index 07355983ed..eebda144d0 100644 --- a/submodules/TelegramCore/Sources/Network.swift +++ b/submodules/TelegramCore/Sources/Network.swift @@ -474,6 +474,17 @@ func initializedNetwork(accountId: AccountRecordId, arguments: NetworkInitializa } } + let useTempAuthKeys: Bool + if let networkSettings = networkSettings { + if let userEnableTempKeys = networkSettings.userEnableTempKeys { + useTempAuthKeys = userEnableTempKeys + } else { + useTempAuthKeys = networkSettings.defaultEnableTempKeys + } + } else { + useTempAuthKeys = true + } + var contextValue: MTContext? sharedContexts.with { store in let key = SharedContextStore.Key(accountId: accountId) @@ -483,7 +494,7 @@ func initializedNetwork(accountId: AccountRecordId, arguments: NetworkInitializa context = current context.updateApiEnvironment({ _ in return apiEnvironment}) } else { - context = MTContext(serialization: serialization, encryptionProvider: arguments.encryptionProvider, apiEnvironment: apiEnvironment, isTestingEnvironment: testingEnvironment, useTempAuthKeys: true)! + context = MTContext(serialization: serialization, encryptionProvider: arguments.encryptionProvider, apiEnvironment: apiEnvironment, isTestingEnvironment: testingEnvironment, useTempAuthKeys: useTempAuthKeys)! store.contexts[key] = context } contextValue = context diff --git a/submodules/TelegramCore/Sources/NetworkSettings.swift b/submodules/TelegramCore/Sources/NetworkSettings.swift index 39d2f071c0..8e5f9b27d6 100644 --- a/submodules/TelegramCore/Sources/NetworkSettings.swift +++ b/submodules/TelegramCore/Sources/NetworkSettings.swift @@ -17,7 +17,7 @@ extension NetworkSettings { } } -public func updateNetworkSettingsInteractively(transaction: Transaction, network: Network, _ f: @escaping (NetworkSettings) -> NetworkSettings) { +public func updateNetworkSettingsInteractively(transaction: Transaction, network: Network?, _ f: @escaping (NetworkSettings) -> NetworkSettings) { var updateNetwork = false var updatedSettings: NetworkSettings? transaction.updatePreferencesEntry(key: PreferencesKeys.networkSettings, { current in @@ -33,7 +33,7 @@ public func updateNetworkSettingsInteractively(transaction: Transaction, network return updated }) - if updateNetwork, let updatedSettings = updatedSettings { + if let network = network, updateNetwork, let updatedSettings = updatedSettings { network.context.updateApiEnvironment { current in return current?.withUpdatedNetworkSettings(updatedSettings.mtNetworkSettings) } diff --git a/submodules/TelegramCore/Sources/SearchMessages.swift b/submodules/TelegramCore/Sources/SearchMessages.swift index 50c9bc8fbb..9cbc767ec6 100644 --- a/submodules/TelegramCore/Sources/SearchMessages.swift +++ b/submodules/TelegramCore/Sources/SearchMessages.swift @@ -221,11 +221,11 @@ public func searchMessages(account: Account, location: SearchMessagesLocation, q guard let inputPeer = apiInputPeer(peer) else { return .single((nil, nil)) } - var fromInputUser: Api.InputUser? = nil + var fromInputPeer: Api.InputPeer? = nil var flags: Int32 = 0 if let from = values.from { - fromInputUser = apiInputUser(from) - if let _ = fromInputUser { + fromInputPeer = apiInputPeer(from) + if let _ = fromInputPeer { flags |= (1 << 0) } } @@ -241,7 +241,7 @@ public func searchMessages(account: Account, location: SearchMessagesLocation, q if peer.id.namespace == Namespaces.Peer.CloudChannel && query.isEmpty && fromId == nil && tags == nil && minDate == nil && maxDate == nil { signal = account.network.request(Api.functions.messages.getHistory(peer: inputPeer, offsetId: lowerBound?.id.id ?? 0, offsetDate: 0, addOffset: 0, limit: limit, maxId: Int32.max - 1, minId: 0, hash: 0)) } else { - signal = account.network.request(Api.functions.messages.search(flags: flags, peer: inputPeer, q: query, fromId: fromInputUser, topMsgId: topMsgId?.id, filter: filter, minDate: minDate ?? 0, maxDate: maxDate ?? (Int32.max - 1), offsetId: lowerBound?.id.id ?? 0, addOffset: 0, limit: limit, maxId: Int32.max - 1, minId: 0, hash: 0)) + signal = account.network.request(Api.functions.messages.search(flags: flags, peer: inputPeer, q: query, fromId: fromInputPeer, topMsgId: topMsgId?.id, filter: filter, minDate: minDate ?? 0, maxDate: maxDate ?? (Int32.max - 1), offsetId: lowerBound?.id.id ?? 0, addOffset: 0, limit: limit, maxId: Int32.max - 1, minId: 0, hash: 0)) } peerMessages = signal |> map(Optional.init) @@ -257,7 +257,7 @@ public func searchMessages(account: Account, location: SearchMessagesLocation, q additionalPeerMessages = .single(nil) } else if mainCompleted || !hasAdditional { let lowerBound = state?.additional?.messages.last.flatMap({ $0.index }) - additionalPeerMessages = account.network.request(Api.functions.messages.search(flags: flags, peer: inputPeer, q: query, fromId: fromInputUser, topMsgId: topMsgId?.id, filter: filter, minDate: minDate ?? 0, maxDate: maxDate ?? (Int32.max - 1), offsetId: lowerBound?.id.id ?? 0, addOffset: 0, limit: limit, maxId: Int32.max - 1, minId: 0, hash: 0)) + additionalPeerMessages = account.network.request(Api.functions.messages.search(flags: flags, peer: inputPeer, q: query, fromId: fromInputPeer, topMsgId: topMsgId?.id, filter: filter, minDate: minDate ?? 0, maxDate: maxDate ?? (Int32.max - 1), offsetId: lowerBound?.id.id ?? 0, addOffset: 0, limit: limit, maxId: Int32.max - 1, minId: 0, hash: 0)) |> map(Optional.init) |> `catch` { _ -> Signal in return .single(nil) diff --git a/submodules/TelegramCore/Sources/UpdateMessageService.swift b/submodules/TelegramCore/Sources/UpdateMessageService.swift index bca8a5a76e..32e797fb71 100644 --- a/submodules/TelegramCore/Sources/UpdateMessageService.swift +++ b/submodules/TelegramCore/Sources/UpdateMessageService.swift @@ -58,7 +58,7 @@ class UpdateMessageService: NSObject, MTMessageService { self.putNext(groups) } case let .updateShortChatMessage(flags, id, fromId, chatId, message, pts, ptsCount, date, fwdFrom, viaBotId, replyHeader, entities): - let generatedMessage = Api.Message.message(flags: flags, id: id, fromId: .peerChat(chatId: fromId), peerId: Api.Peer.peerChat(chatId: chatId), fwdFrom: fwdFrom, viaBotId: viaBotId, replyTo: replyHeader, date: date, message: message, media: Api.MessageMedia.messageMediaEmpty, replyMarkup: nil, entities: entities, views: nil, forwards: nil, replies: nil, editDate: nil, postAuthor: nil, groupedId: nil, restrictionReason: nil) + let generatedMessage = Api.Message.message(flags: flags, id: id, fromId: .peerUser(userId: fromId), peerId: Api.Peer.peerChat(chatId: chatId), fwdFrom: fwdFrom, viaBotId: viaBotId, replyTo: replyHeader, date: date, message: message, media: Api.MessageMedia.messageMediaEmpty, replyMarkup: nil, entities: entities, views: nil, forwards: nil, replies: nil, editDate: nil, postAuthor: nil, groupedId: nil, restrictionReason: nil) let update = Api.Update.updateNewMessage(message: generatedMessage, pts: pts, ptsCount: ptsCount) let groups = groupUpdates([update], users: [], chats: [], date: date, seqRange: nil) if groups.count != 0 { diff --git a/submodules/TelegramPresentationData/Sources/PresentationStrings.swift b/submodules/TelegramPresentationData/Sources/PresentationStrings.swift index 42445fd41b..d3abf8b466 100644 --- a/submodules/TelegramPresentationData/Sources/PresentationStrings.swift +++ b/submodules/TelegramPresentationData/Sources/PresentationStrings.swift @@ -4394,1395 +4394,1396 @@ public final class PresentationStrings: Equatable { } public var SettingsSearch_Synonyms_Notifications_BadgeIncludeMutedChannels: String { return self._s[3938]! } public var CallFeedback_VideoReasonLowQuality: String { return self._s[3939]! } - public var SocksProxySetup_AddProxyTitle: String { return self._s[3940]! } - public var Passport_Identity_AddInternalPassport: String { return self._s[3941]! } + public var Conversation_PinnedPreviousMessage: String { return self._s[3940]! } + public var SocksProxySetup_AddProxyTitle: String { return self._s[3941]! } + public var Passport_Identity_AddInternalPassport: String { return self._s[3942]! } public func ChatList_RemovedFromFolderTooltip(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3942]!, self._r[3942]!, [_1, _2]) + return formatWithArgumentRanges(self._s[3943]!, self._r[3943]!, [_1, _2]) } public func Conversation_SetReminder_RemindToday(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3943]!, self._r[3943]!, [_0]) + return formatWithArgumentRanges(self._s[3944]!, self._r[3944]!, [_0]) } - public var Passport_Identity_GenderFemale: String { return self._s[3944]! } - public var ConvertToSupergroup_HelpTitle: String { return self._s[3947]! } - public var SharedMedia_TitleAll: String { return self._s[3948]! } - public var Settings_Context_Logout: String { return self._s[3949]! } - public var GroupInfo_SetGroupPhotoDelete: String { return self._s[3951]! } - public var Settings_About_Title: String { return self._s[3952]! } - public var StickerSettings_ContextHide: String { return self._s[3953]! } + public var Passport_Identity_GenderFemale: String { return self._s[3945]! } + public var ConvertToSupergroup_HelpTitle: String { return self._s[3948]! } + public var SharedMedia_TitleAll: String { return self._s[3949]! } + public var Settings_Context_Logout: String { return self._s[3950]! } + public var GroupInfo_SetGroupPhotoDelete: String { return self._s[3952]! } + public var Settings_About_Title: String { return self._s[3953]! } + public var StickerSettings_ContextHide: String { return self._s[3954]! } public func AutoDownloadSettings_UpTo(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3954]!, self._r[3954]!, [_0]) - } - public func Conversation_LiveLocationYouAndOther(_ _0: String) -> (String, [(Int, NSRange)]) { return formatWithArgumentRanges(self._s[3955]!, self._r[3955]!, [_0]) } - public var Common_Cancel: String { return self._s[3957]! } - public var CallFeedback_Title: String { return self._s[3959]! } - public func Notification_PinnedContactMessage(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3960]!, self._r[3960]!, [_0]) + public func Conversation_LiveLocationYouAndOther(_ _0: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[3956]!, self._r[3956]!, [_0]) } - public var Activity_UploadingVideoMessage: String { return self._s[3961]! } - public var Wallet_TransactionInfo_OtherFeeInfo: String { return self._s[3962]! } - public var MediaPicker_Send: String { return self._s[3963]! } - public var PasscodeSettings_AutoLock_IfAwayFor_1minute: String { return self._s[3964]! } - public var Conversation_LiveLocationYou: String { return self._s[3965]! } - public var Notifications_ExceptionsUnmuted: String { return self._s[3966]! } + public var Common_Cancel: String { return self._s[3958]! } + public var CallFeedback_Title: String { return self._s[3960]! } + public func Notification_PinnedContactMessage(_ _0: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[3961]!, self._r[3961]!, [_0]) + } + public var Activity_UploadingVideoMessage: String { return self._s[3962]! } + public var Wallet_TransactionInfo_OtherFeeInfo: String { return self._s[3963]! } + public var MediaPicker_Send: String { return self._s[3964]! } + public var PasscodeSettings_AutoLock_IfAwayFor_1minute: String { return self._s[3965]! } + public var Conversation_LiveLocationYou: String { return self._s[3966]! } + public var Notifications_ExceptionsUnmuted: String { return self._s[3967]! } public func Channel_AdminLog_MessageGroupPreHistoryHidden(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3967]!, self._r[3967]!, [_0]) + return formatWithArgumentRanges(self._s[3968]!, self._r[3968]!, [_0]) } public func PUSH_CHAT_ADD_YOU(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3968]!, self._r[3968]!, [_1, _2]) + return formatWithArgumentRanges(self._s[3969]!, self._r[3969]!, [_1, _2]) } - public var Conversation_ViewBackground: String { return self._s[3969]! } - public var ChatSettings_PrivateChats: String { return self._s[3972]! } - public var Conversation_ErrorInaccessibleMessage: String { return self._s[3973]! } - public var Wallet_Receive_AmountInfo: String { return self._s[3974]! } - public var Appearance_ThemeNight: String { return self._s[3975]! } - public var Common_Search: String { return self._s[3976]! } - public var TwoStepAuth_ReEnterPasswordTitle: String { return self._s[3977]! } - public var ChangePhoneNumberNumber_Help: String { return self._s[3979]! } - public var Stickers_SuggestAdded: String { return self._s[3980]! } - public var Conversation_DiscardVoiceMessageDescription: String { return self._s[3983]! } - public var NetworkUsageSettings_Cellular: String { return self._s[3984]! } - public var CheckoutInfo_Title: String { return self._s[3985]! } - public var Conversation_ShareBotLocationConfirmationTitle: String { return self._s[3986]! } - public var Channel_BotDoesntSupportGroups: String { return self._s[3987]! } + public var Conversation_ViewBackground: String { return self._s[3970]! } + public var ChatSettings_PrivateChats: String { return self._s[3973]! } + public var Conversation_ErrorInaccessibleMessage: String { return self._s[3974]! } + public var Wallet_Receive_AmountInfo: String { return self._s[3975]! } + public var Appearance_ThemeNight: String { return self._s[3976]! } + public var Common_Search: String { return self._s[3977]! } + public var TwoStepAuth_ReEnterPasswordTitle: String { return self._s[3978]! } + public var ChangePhoneNumberNumber_Help: String { return self._s[3980]! } + public var Stickers_SuggestAdded: String { return self._s[3981]! } + public var Conversation_DiscardVoiceMessageDescription: String { return self._s[3984]! } + public var NetworkUsageSettings_Cellular: String { return self._s[3985]! } + public var CheckoutInfo_Title: String { return self._s[3986]! } + public var Conversation_ShareBotLocationConfirmationTitle: String { return self._s[3987]! } + public var Channel_BotDoesntSupportGroups: String { return self._s[3988]! } public func DialogList_SingleRecordingAudioSuffix(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3988]!, self._r[3988]!, [_0]) + return formatWithArgumentRanges(self._s[3989]!, self._r[3989]!, [_0]) } - public var MaskStickerSettings_Info: String { return self._s[3989]! } - public var GroupRemoved_DeleteUser: String { return self._s[3990]! } - public var Contacts_ShareTelegram: String { return self._s[3991]! } - public var Group_UpgradeNoticeText1: String { return self._s[3992]! } + public var MaskStickerSettings_Info: String { return self._s[3990]! } + public var GroupRemoved_DeleteUser: String { return self._s[3991]! } + public var Contacts_ShareTelegram: String { return self._s[3992]! } + public var Group_UpgradeNoticeText1: String { return self._s[3993]! } public func PUSH_PHONE_CALL_REQUEST(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3993]!, self._r[3993]!, [_1]) + return formatWithArgumentRanges(self._s[3994]!, self._r[3994]!, [_1]) } - public var PrivacyLastSeenSettings_Title: String { return self._s[3994]! } - public var SettingsSearch_Synonyms_Support: String { return self._s[3998]! } - public var PhotoEditor_TintTool: String { return self._s[3999]! } - public var Wallet_Receive_InvoiceUrlHeader: String { return self._s[4001]! } - public var GroupPermission_NoSendPolls: String { return self._s[4002]! } - public var NotificationsSound_None: String { return self._s[4003]! } + public var PrivacyLastSeenSettings_Title: String { return self._s[3995]! } + public var SettingsSearch_Synonyms_Support: String { return self._s[3999]! } + public var PhotoEditor_TintTool: String { return self._s[4000]! } + public var Wallet_Receive_InvoiceUrlHeader: String { return self._s[4002]! } + public var GroupPermission_NoSendPolls: String { return self._s[4003]! } + public var NotificationsSound_None: String { return self._s[4004]! } public func LOCAL_CHANNEL_MESSAGE_FWDS(_ _1: String, _ _2: Int) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4004]!, self._r[4004]!, [_1, "\(_2)"]) + return formatWithArgumentRanges(self._s[4005]!, self._r[4005]!, [_1, "\(_2)"]) } - public var CheckoutInfo_ShippingInfoCityPlaceholder: String { return self._s[4006]! } - public var ExplicitContent_AlertChannel: String { return self._s[4008]! } - public var Conversation_ClousStorageInfo_Description1: String { return self._s[4009]! } - public var Contacts_SortedByPresence: String { return self._s[4010]! } - public var WallpaperSearch_ColorGray: String { return self._s[4011]! } - public var Channel_AdminLogFilter_EventsNewSubscribers: String { return self._s[4012]! } - public var Conversation_ReportSpam: String { return self._s[4013]! } - public var ChatList_Search_NoResultsFilter: String { return self._s[4016]! } - public var WallpaperSearch_ColorBlack: String { return self._s[4017]! } - public var ArchivedChats_IntroTitle3: String { return self._s[4018]! } - public var Conversation_DefaultRestrictedText: String { return self._s[4019]! } - public var Settings_Devices: String { return self._s[4020]! } - public var Call_AudioRouteSpeaker: String { return self._s[4021]! } - public var GroupInfo_InviteLink_CopyLink: String { return self._s[4022]! } - public var Passport_Address_Country: String { return self._s[4024]! } - public var Cache_MaximumCacheSize: String { return self._s[4025]! } - public var Notifications_Badge_IncludePublicGroups: String { return self._s[4026]! } - public var Wallet_Receive_CreateInvoice: String { return self._s[4028]! } - public var ChatSettings_AutoDownloadUsingWiFi: String { return self._s[4029]! } - public var Login_TermsOfServiceLabel: String { return self._s[4030]! } - public var Calls_NoMissedCallsPlacehoder: String { return self._s[4031]! } - public var SocksProxySetup_RequiredCredentials: String { return self._s[4032]! } - public var VoiceOver_MessageContextOpenMessageMenu: String { return self._s[4033]! } - public var AutoNightTheme_ScheduledFrom: String { return self._s[4034]! } - public var ChatSettings_AutoDownloadDocuments: String { return self._s[4035]! } - public var ConvertToSupergroup_Note: String { return self._s[4037]! } - public var Settings_SetNewProfilePhotoOrVideo: String { return self._s[4038]! } - public var PrivacySettings_PasscodeAndTouchId: String { return self._s[4039]! } - public var Common_More: String { return self._s[4040]! } - public var ShareMenu_SelectChats: String { return self._s[4042]! } + public var CheckoutInfo_ShippingInfoCityPlaceholder: String { return self._s[4007]! } + public var ExplicitContent_AlertChannel: String { return self._s[4009]! } + public var Conversation_ClousStorageInfo_Description1: String { return self._s[4010]! } + public var Contacts_SortedByPresence: String { return self._s[4011]! } + public var WallpaperSearch_ColorGray: String { return self._s[4012]! } + public var Channel_AdminLogFilter_EventsNewSubscribers: String { return self._s[4013]! } + public var Conversation_ReportSpam: String { return self._s[4014]! } + public var ChatList_Search_NoResultsFilter: String { return self._s[4017]! } + public var WallpaperSearch_ColorBlack: String { return self._s[4018]! } + public var ArchivedChats_IntroTitle3: String { return self._s[4019]! } + public var Conversation_DefaultRestrictedText: String { return self._s[4020]! } + public var Settings_Devices: String { return self._s[4021]! } + public var Call_AudioRouteSpeaker: String { return self._s[4022]! } + public var GroupInfo_InviteLink_CopyLink: String { return self._s[4023]! } + public var Passport_Address_Country: String { return self._s[4025]! } + public var Cache_MaximumCacheSize: String { return self._s[4026]! } + public var Notifications_Badge_IncludePublicGroups: String { return self._s[4027]! } + public var Wallet_Receive_CreateInvoice: String { return self._s[4029]! } + public var ChatSettings_AutoDownloadUsingWiFi: String { return self._s[4030]! } + public var Login_TermsOfServiceLabel: String { return self._s[4031]! } + public var Calls_NoMissedCallsPlacehoder: String { return self._s[4032]! } + public var SocksProxySetup_RequiredCredentials: String { return self._s[4033]! } + public var VoiceOver_MessageContextOpenMessageMenu: String { return self._s[4034]! } + public var AutoNightTheme_ScheduledFrom: String { return self._s[4035]! } + public var ChatSettings_AutoDownloadDocuments: String { return self._s[4036]! } + public var ConvertToSupergroup_Note: String { return self._s[4038]! } + public var Settings_SetNewProfilePhotoOrVideo: String { return self._s[4039]! } + public var PrivacySettings_PasscodeAndTouchId: String { return self._s[4040]! } + public var Common_More: String { return self._s[4041]! } + public var ShareMenu_SelectChats: String { return self._s[4043]! } public func Conversation_ScheduleMessage_SendToday(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4044]!, self._r[4044]!, [_0]) - } - public func Channel_AdminLog_MessageRemovedGroupStickerPack(_ _0: String) -> (String, [(Int, NSRange)]) { return formatWithArgumentRanges(self._s[4045]!, self._r[4045]!, [_0]) } - public var Contacts_PermissionsKeepDisabled: String { return self._s[4047]! } + public func Channel_AdminLog_MessageRemovedGroupStickerPack(_ _0: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[4046]!, self._r[4046]!, [_0]) + } + public var Contacts_PermissionsKeepDisabled: String { return self._s[4048]! } public func Call_ParticipantVersionOutdatedError(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4048]!, self._r[4048]!, [_0]) + return formatWithArgumentRanges(self._s[4049]!, self._r[4049]!, [_0]) } - public var WatchRemote_AlertOpen: String { return self._s[4049]! } + public var WatchRemote_AlertOpen: String { return self._s[4050]! } public func PUSH_CHAT_ADD_MEMBER(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4050]!, self._r[4050]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[4051]!, self._r[4051]!, [_1, _2, _3]) } - public var Channel_Members_AddMembersHelp: String { return self._s[4051]! } - public var Shortcut_SwitchAccount: String { return self._s[4052]! } - public var Map_LiveLocationFor8Hours: String { return self._s[4053]! } + public var Channel_Members_AddMembersHelp: String { return self._s[4052]! } + public var Shortcut_SwitchAccount: String { return self._s[4053]! } + public var Map_LiveLocationFor8Hours: String { return self._s[4054]! } public func AutoNightTheme_AutomaticHelp(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4054]!, self._r[4054]!, [_0]) + return formatWithArgumentRanges(self._s[4055]!, self._r[4055]!, [_0]) } - public var Compose_NewGroupTitle: String { return self._s[4055]! } - public var DialogList_You: String { return self._s[4056]! } - public var ReportPeer_ReasonViolence: String { return self._s[4057]! } + public var Compose_NewGroupTitle: String { return self._s[4056]! } + public var DialogList_You: String { return self._s[4057]! } + public var ReportPeer_ReasonViolence: String { return self._s[4058]! } public func PUSH_CHANNEL_MESSAGE_STICKER(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4058]!, self._r[4058]!, [_1, _2]) + return formatWithArgumentRanges(self._s[4059]!, self._r[4059]!, [_1, _2]) } - public var KeyCommand_ScrollDown: String { return self._s[4062]! } - public var ChatSettings_DownloadInBackground: String { return self._s[4063]! } - public var Wallpaper_ResetWallpapers: String { return self._s[4064]! } - public var Channel_BanList_RestrictedTitle: String { return self._s[4065]! } - public var ArchivedChats_IntroText3: String { return self._s[4066]! } - public var HashtagSearch_AllChats: String { return self._s[4068]! } - public var Channel_Info_BlackList: String { return self._s[4070]! } - public var Contacts_SearchUsersAndGroupsLabel: String { return self._s[4071]! } - public var PrivacyPhoneNumberSettings_DiscoveryHeader: String { return self._s[4072]! } - public var Paint_Neon: String { return self._s[4074]! } - public var SettingsSearch_Synonyms_AppLanguage: String { return self._s[4075]! } - public var AutoDownloadSettings_AutoDownload: String { return self._s[4076]! } + public var KeyCommand_ScrollDown: String { return self._s[4063]! } + public var ChatSettings_DownloadInBackground: String { return self._s[4064]! } + public var Wallpaper_ResetWallpapers: String { return self._s[4065]! } + public var Channel_BanList_RestrictedTitle: String { return self._s[4066]! } + public var ArchivedChats_IntroText3: String { return self._s[4067]! } + public var HashtagSearch_AllChats: String { return self._s[4069]! } + public var Channel_Info_BlackList: String { return self._s[4071]! } + public var Contacts_SearchUsersAndGroupsLabel: String { return self._s[4072]! } + public var PrivacyPhoneNumberSettings_DiscoveryHeader: String { return self._s[4073]! } + public var Paint_Neon: String { return self._s[4075]! } + public var SettingsSearch_Synonyms_AppLanguage: String { return self._s[4076]! } + public var AutoDownloadSettings_AutoDownload: String { return self._s[4077]! } public func Notification_PinnedVideoMessage(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4078]!, self._r[4078]!, [_0]) + return formatWithArgumentRanges(self._s[4079]!, self._r[4079]!, [_0]) } - public var Map_StopLiveLocation: String { return self._s[4079]! } - public var SettingsSearch_Synonyms_Data_SaveEditedPhotos: String { return self._s[4080]! } - public var Channel_Username_InvalidCharacters: String { return self._s[4081]! } - public var InstantPage_Reference: String { return self._s[4082]! } - public var ChatList_HideAction: String { return self._s[4084]! } - public var Conversation_FileICloudDrive: String { return self._s[4086]! } + public var Map_StopLiveLocation: String { return self._s[4080]! } + public var SettingsSearch_Synonyms_Data_SaveEditedPhotos: String { return self._s[4081]! } + public var Channel_Username_InvalidCharacters: String { return self._s[4082]! } + public var InstantPage_Reference: String { return self._s[4083]! } + public var ChatList_HideAction: String { return self._s[4085]! } + public var Conversation_FileICloudDrive: String { return self._s[4087]! } public func PUSH_PINNED_GEOLIVE(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4087]!, self._r[4087]!, [_1]) + return formatWithArgumentRanges(self._s[4088]!, self._r[4088]!, [_1]) } - public var Passport_PasswordReset: String { return self._s[4089]! } - public var ChatList_Context_UnhideArchive: String { return self._s[4091]! } - public var ConvertToSupergroup_HelpText: String { return self._s[4092]! } - public var Calls_AddTab: String { return self._s[4093]! } - public var TwoStepAuth_ConfirmEmailResendCode: String { return self._s[4094]! } - public var SettingsSearch_Synonyms_Stickers_SuggestStickers: String { return self._s[4095]! } - public var Privacy_GroupsAndChannels: String { return self._s[4097]! } - public var AutoNightTheme_Disabled: String { return self._s[4098]! } - public var CreatePoll_MultipleChoice: String { return self._s[4099]! } + public var Passport_PasswordReset: String { return self._s[4090]! } + public var ChatList_Context_UnhideArchive: String { return self._s[4092]! } + public var ConvertToSupergroup_HelpText: String { return self._s[4093]! } + public var Calls_AddTab: String { return self._s[4094]! } + public var TwoStepAuth_ConfirmEmailResendCode: String { return self._s[4095]! } + public var SettingsSearch_Synonyms_Stickers_SuggestStickers: String { return self._s[4096]! } + public var Privacy_GroupsAndChannels: String { return self._s[4098]! } + public var AutoNightTheme_Disabled: String { return self._s[4099]! } + public var CreatePoll_MultipleChoice: String { return self._s[4100]! } public func PINNED_INVOICE(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4100]!, self._r[4100]!, [_1]) + return formatWithArgumentRanges(self._s[4101]!, self._r[4101]!, [_1]) } - public var Watch_Bot_Restart: String { return self._s[4102]! } + public var Watch_Bot_Restart: String { return self._s[4103]! } public func Conversation_Kilobytes(_ _0: Int) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4103]!, self._r[4103]!, ["\(_0)"]) + return formatWithArgumentRanges(self._s[4104]!, self._r[4104]!, ["\(_0)"]) } - public var GroupInfo_ScamGroupWarning: String { return self._s[4104]! } - public var Conversation_EditingMessagePanelMedia: String { return self._s[4105]! } - public var Appearance_PreviewIncomingText: String { return self._s[4106]! } - public var Notifications_ChannelNotificationsExceptionsHelp: String { return self._s[4107]! } - public var ChatList_UndoArchiveRevealedTitle: String { return self._s[4109]! } - public var Stats_GroupOverview: String { return self._s[4111]! } - public var ScheduledMessages_EditTime: String { return self._s[4114]! } - public var Month_GenFebruary: String { return self._s[4115]! } - public var ChatList_AutoarchiveSuggestion_OpenSettings: String { return self._s[4116]! } - public var Stickers_ClearRecent: String { return self._s[4117]! } - public var TwoStepAuth_EnterPasswordPassword: String { return self._s[4118]! } + public var GroupInfo_ScamGroupWarning: String { return self._s[4105]! } + public var Conversation_EditingMessagePanelMedia: String { return self._s[4106]! } + public var Appearance_PreviewIncomingText: String { return self._s[4107]! } + public var Notifications_ChannelNotificationsExceptionsHelp: String { return self._s[4108]! } + public var ChatList_UndoArchiveRevealedTitle: String { return self._s[4110]! } + public var Stats_GroupOverview: String { return self._s[4112]! } + public var ScheduledMessages_EditTime: String { return self._s[4115]! } + public var Month_GenFebruary: String { return self._s[4116]! } + public var ChatList_AutoarchiveSuggestion_OpenSettings: String { return self._s[4117]! } + public var Stickers_ClearRecent: String { return self._s[4118]! } + public var TwoStepAuth_EnterPasswordPassword: String { return self._s[4119]! } public func Checkout_PayPrice(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4119]!, self._r[4119]!, [_0]) + return formatWithArgumentRanges(self._s[4120]!, self._r[4120]!, [_0]) } - public var Login_TermsOfServiceSignupDecline: String { return self._s[4120]! } - public var CheckoutInfo_ErrorCityInvalid: String { return self._s[4121]! } - public var VoiceOver_Chat_PlayHint: String { return self._s[4122]! } - public var ChatAdmins_AllMembersAreAdminsOffHelp: String { return self._s[4123]! } - public var CheckoutInfo_ShippingInfoTitle: String { return self._s[4125]! } - public var CreatePoll_Create: String { return self._s[4126]! } - public var ChatList_Search_FilterLinks: String { return self._s[4127]! } - public var Your_cards_number_is_invalid: String { return self._s[4128]! } - public var Month_ShortApril: String { return self._s[4129]! } - public var SocksProxySetup_UseForCalls: String { return self._s[4130]! } - public var Conversation_EditingCaptionPanelTitle: String { return self._s[4131]! } - public var SocksProxySetup_Status: String { return self._s[4132]! } - public var ChannelInfo_DeleteGroupConfirmation: String { return self._s[4133]! } - public var ChatListFolder_CategoryBots: String { return self._s[4134]! } - public var Passport_FieldIdentitySelfieHelp: String { return self._s[4136]! } - public var GroupInfo_BroadcastListNamePlaceholder: String { return self._s[4137]! } - public var Wallpaper_ResetWallpapersInfo: String { return self._s[4138]! } - public var Conversation_TitleUnmute: String { return self._s[4139]! } - public var Group_Setup_TypeHeader: String { return self._s[4140]! } - public var Stats_ViewsPerPost: String { return self._s[4141]! } - public var CheckoutInfo_ShippingInfoCountry: String { return self._s[4142]! } - public var Passport_Identity_TranslationHelp: String { return self._s[4143]! } + public var Login_TermsOfServiceSignupDecline: String { return self._s[4121]! } + public var CheckoutInfo_ErrorCityInvalid: String { return self._s[4122]! } + public var VoiceOver_Chat_PlayHint: String { return self._s[4123]! } + public var ChatAdmins_AllMembersAreAdminsOffHelp: String { return self._s[4124]! } + public var CheckoutInfo_ShippingInfoTitle: String { return self._s[4126]! } + public var CreatePoll_Create: String { return self._s[4127]! } + public var ChatList_Search_FilterLinks: String { return self._s[4128]! } + public var Your_cards_number_is_invalid: String { return self._s[4129]! } + public var Month_ShortApril: String { return self._s[4130]! } + public var SocksProxySetup_UseForCalls: String { return self._s[4131]! } + public var Conversation_EditingCaptionPanelTitle: String { return self._s[4132]! } + public var SocksProxySetup_Status: String { return self._s[4133]! } + public var ChannelInfo_DeleteGroupConfirmation: String { return self._s[4134]! } + public var ChatListFolder_CategoryBots: String { return self._s[4135]! } + public var Passport_FieldIdentitySelfieHelp: String { return self._s[4137]! } + public var GroupInfo_BroadcastListNamePlaceholder: String { return self._s[4138]! } + public var Wallpaper_ResetWallpapersInfo: String { return self._s[4139]! } + public var Conversation_TitleUnmute: String { return self._s[4140]! } + public var Group_Setup_TypeHeader: String { return self._s[4141]! } + public var Stats_ViewsPerPost: String { return self._s[4142]! } + public var CheckoutInfo_ShippingInfoCountry: String { return self._s[4143]! } + public var Passport_Identity_TranslationHelp: String { return self._s[4144]! } public func PUSH_CHANNEL_MESSAGE_FWD(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4144]!, self._r[4144]!, [_1]) + return formatWithArgumentRanges(self._s[4145]!, self._r[4145]!, [_1]) } - public var GroupInfo_Administrators_Title: String { return self._s[4145]! } + public var GroupInfo_Administrators_Title: String { return self._s[4146]! } public func Channel_AdminLog_MessageRankName(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4146]!, self._r[4146]!, [_1, _2]) + return formatWithArgumentRanges(self._s[4147]!, self._r[4147]!, [_1, _2]) } public func PUSH_CHAT_MESSAGE_POLL(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4147]!, self._r[4147]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[4148]!, self._r[4148]!, [_1, _2, _3]) } - public var Wallet_Receive_Title: String { return self._s[4148]! } - public var CheckoutInfo_ShippingInfoState: String { return self._s[4149]! } - public var Passport_Language_my: String { return self._s[4151]! } - public var PrivacyLastSeenSettings_AlwaysShareWith_Title: String { return self._s[4152]! } - public var Map_PlacesNearby: String { return self._s[4153]! } - public var Channel_About_Help: String { return self._s[4154]! } - public var LogoutOptions_AddAccountTitle: String { return self._s[4155]! } - public var ChatSettings_AutomaticAudioDownload: String { return self._s[4156]! } - public var Channel_Username_Title: String { return self._s[4157]! } - public var Activity_RecordingVideoMessage: String { return self._s[4158]! } + public var Wallet_Receive_Title: String { return self._s[4149]! } + public var CheckoutInfo_ShippingInfoState: String { return self._s[4150]! } + public var Passport_Language_my: String { return self._s[4152]! } + public var PrivacyLastSeenSettings_AlwaysShareWith_Title: String { return self._s[4153]! } + public var Map_PlacesNearby: String { return self._s[4154]! } + public var Channel_About_Help: String { return self._s[4155]! } + public var LogoutOptions_AddAccountTitle: String { return self._s[4156]! } + public var ChatSettings_AutomaticAudioDownload: String { return self._s[4157]! } + public var Channel_Username_Title: String { return self._s[4158]! } + public var Activity_RecordingVideoMessage: String { return self._s[4159]! } public func StickerPackActionInfo_RemovedText(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4159]!, self._r[4159]!, [_0]) + return formatWithArgumentRanges(self._s[4160]!, self._r[4160]!, [_0]) } - public var CheckoutInfo_ShippingInfoCity: String { return self._s[4160]! } - public var Passport_DiscardMessageDescription: String { return self._s[4161]! } - public var Conversation_LinkDialogOpen: String { return self._s[4162]! } - public var ChatList_Context_HideArchive: String { return self._s[4163]! } + public var CheckoutInfo_ShippingInfoCity: String { return self._s[4161]! } + public var Passport_DiscardMessageDescription: String { return self._s[4162]! } + public var Conversation_LinkDialogOpen: String { return self._s[4163]! } + public var ChatList_Context_HideArchive: String { return self._s[4164]! } public func Message_AuthorPinnedGame(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4164]!, self._r[4164]!, [_0]) + return formatWithArgumentRanges(self._s[4165]!, self._r[4165]!, [_0]) } - public var Privacy_GroupsAndChannels_CustomShareHelp: String { return self._s[4165]! } - public var Conversation_Admin: String { return self._s[4166]! } - public var DialogList_TabTitle: String { return self._s[4167]! } + public var Privacy_GroupsAndChannels_CustomShareHelp: String { return self._s[4166]! } + public var Conversation_Admin: String { return self._s[4167]! } + public var DialogList_TabTitle: String { return self._s[4168]! } public func PUSH_CHAT_ALBUM(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4168]!, self._r[4168]!, [_1, _2]) + return formatWithArgumentRanges(self._s[4169]!, self._r[4169]!, [_1, _2]) } - public var Notifications_PermissionsUnreachableText: String { return self._s[4169]! } - public var Passport_Identity_GenderMale: String { return self._s[4171]! } - public var SettingsSearch_Synonyms_Privacy_BlockedUsers: String { return self._s[4173]! } - public var PhoneNumberHelp_Alert: String { return self._s[4174]! } - public var EnterPasscode_EnterNewPasscodeChange: String { return self._s[4175]! } - public var Notifications_InAppNotifications: String { return self._s[4176]! } + public var Notifications_PermissionsUnreachableText: String { return self._s[4170]! } + public var Passport_Identity_GenderMale: String { return self._s[4172]! } + public var SettingsSearch_Synonyms_Privacy_BlockedUsers: String { return self._s[4174]! } + public var PhoneNumberHelp_Alert: String { return self._s[4175]! } + public var EnterPasscode_EnterNewPasscodeChange: String { return self._s[4176]! } + public var Notifications_InAppNotifications: String { return self._s[4177]! } public func Update_AppVersion(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4177]!, self._r[4177]!, [_0]) + return formatWithArgumentRanges(self._s[4178]!, self._r[4178]!, [_0]) } - public var Notification_VideoCallOutgoing: String { return self._s[4178]! } - public var Login_InvalidCodeError: String { return self._s[4179]! } - public var Conversation_PrivateChannelTimeLimitedAlertJoin: String { return self._s[4180]! } + public var Notification_VideoCallOutgoing: String { return self._s[4179]! } + public var Login_InvalidCodeError: String { return self._s[4180]! } + public var Conversation_PrivateChannelTimeLimitedAlertJoin: String { return self._s[4181]! } public func LastSeen_TodayAt(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4181]!, self._r[4181]!, [_0]) + return formatWithArgumentRanges(self._s[4182]!, self._r[4182]!, [_0]) } - public var Conversation_InputTextCaptionPlaceholder: String { return self._s[4182]! } - public var ReportPeer_Report: String { return self._s[4183]! } - public var Camera_FlashOff: String { return self._s[4185]! } - public var Conversation_InputTextBroadcastPlaceholder: String { return self._s[4188]! } - public var PrivacyPolicy_DeclineTitle: String { return self._s[4190]! } - public var SettingsSearch_Synonyms_Privacy_PasscodeAndTouchId: String { return self._s[4191]! } - public var Passport_FieldEmail: String { return self._s[4192]! } + public var Conversation_InputTextCaptionPlaceholder: String { return self._s[4183]! } + public var ReportPeer_Report: String { return self._s[4184]! } + public var Camera_FlashOff: String { return self._s[4186]! } + public var Conversation_InputTextBroadcastPlaceholder: String { return self._s[4189]! } + public var PrivacyPolicy_DeclineTitle: String { return self._s[4191]! } + public var SettingsSearch_Synonyms_Privacy_PasscodeAndTouchId: String { return self._s[4192]! } + public var Passport_FieldEmail: String { return self._s[4193]! } public func Channel_AdminLog_MessageKickedName(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4193]!, self._r[4193]!, [_1]) + return formatWithArgumentRanges(self._s[4194]!, self._r[4194]!, [_1]) } - public var Notifications_ExceptionsResetToDefaults: String { return self._s[4194]! } - public var PeerInfo_PaneVoiceAndVideo: String { return self._s[4195]! } - public var Group_OwnershipTransfer_Title: String { return self._s[4196]! } - public var Conversation_DefaultRestrictedInline: String { return self._s[4197]! } - public var Login_PhoneNumberHelp: String { return self._s[4199]! } - public var Channel_AdminLogFilter_EventsNewMembers: String { return self._s[4200]! } - public var Conversation_PinnedQuiz: String { return self._s[4201]! } - public var CreateGroup_SoftUserLimitAlert: String { return self._s[4202]! } - public var Login_PhoneNumberAlreadyAuthorizedSwitch: String { return self._s[4203]! } - public var Group_MessagePhotoUpdated: String { return self._s[4204]! } - public var LoginPassword_PasswordPlaceholder: String { return self._s[4205]! } - public var Passport_Identity_Translations: String { return self._s[4207]! } - public var ChatAdmins_AllMembersAreAdmins: String { return self._s[4208]! } - public var ChannelInfo_DeleteChannel: String { return self._s[4210]! } - public var PasscodeSettings_HelpBottom: String { return self._s[4211]! } - public var Channel_Members_AddMembers: String { return self._s[4212]! } - public var AutoDownloadSettings_LastDelimeter: String { return self._s[4213]! } - public var Notification_Exceptions_DeleteAllConfirmation: String { return self._s[4215]! } - public var Conversation_HoldForAudio: String { return self._s[4216]! } - public var Watch_LastSeen_Lately: String { return self._s[4218]! } - public var ChatList_Context_MarkAsRead: String { return self._s[4219]! } - public var Conversation_PinnedMessage: String { return self._s[4220]! } - public var SettingsSearch_Synonyms_Appearance_ColorTheme: String { return self._s[4221]! } - public var Passport_UpdateRequiredError: String { return self._s[4223]! } - public var PrivacySettings_Passcode: String { return self._s[4224]! } + public var Notifications_ExceptionsResetToDefaults: String { return self._s[4195]! } + public var PeerInfo_PaneVoiceAndVideo: String { return self._s[4196]! } + public var Group_OwnershipTransfer_Title: String { return self._s[4197]! } + public var Conversation_DefaultRestrictedInline: String { return self._s[4198]! } + public var Login_PhoneNumberHelp: String { return self._s[4200]! } + public var Channel_AdminLogFilter_EventsNewMembers: String { return self._s[4201]! } + public var Conversation_PinnedQuiz: String { return self._s[4202]! } + public var CreateGroup_SoftUserLimitAlert: String { return self._s[4203]! } + public var Login_PhoneNumberAlreadyAuthorizedSwitch: String { return self._s[4204]! } + public var Group_MessagePhotoUpdated: String { return self._s[4205]! } + public var LoginPassword_PasswordPlaceholder: String { return self._s[4206]! } + public var Passport_Identity_Translations: String { return self._s[4208]! } + public var ChatAdmins_AllMembersAreAdmins: String { return self._s[4209]! } + public var ChannelInfo_DeleteChannel: String { return self._s[4211]! } + public var PasscodeSettings_HelpBottom: String { return self._s[4212]! } + public var Channel_Members_AddMembers: String { return self._s[4213]! } + public var AutoDownloadSettings_LastDelimeter: String { return self._s[4214]! } + public var Notification_Exceptions_DeleteAllConfirmation: String { return self._s[4216]! } + public var Conversation_HoldForAudio: String { return self._s[4217]! } + public var Watch_LastSeen_Lately: String { return self._s[4219]! } + public var ChatList_Context_MarkAsRead: String { return self._s[4220]! } + public var Conversation_PinnedMessage: String { return self._s[4221]! } + public var SettingsSearch_Synonyms_Appearance_ColorTheme: String { return self._s[4222]! } + public var Passport_UpdateRequiredError: String { return self._s[4224]! } + public var PrivacySettings_Passcode: String { return self._s[4225]! } public func Call_EmojiDescription(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4225]!, self._r[4225]!, [_0]) + return formatWithArgumentRanges(self._s[4226]!, self._r[4226]!, [_0]) } - public var AutoNightTheme_NotAvailable: String { return self._s[4226]! } - public var Conversation_PressVolumeButtonForSound: String { return self._s[4227]! } - public var LoginPassword_InvalidPasswordError: String { return self._s[4228]! } - public var ChatListFolder_IncludedSectionHeader: String { return self._s[4229]! } - public var Channel_SignMessages_Help: String { return self._s[4230]! } - public var ChatList_DeleteForEveryoneConfirmationTitle: String { return self._s[4231]! } - public var Conversation_TitleNoComments: String { return self._s[4232]! } - public var MediaPicker_LivePhotoDescription: String { return self._s[4233]! } - public var GroupInfo_Permissions: String { return self._s[4234]! } - public var GroupPermission_NoSendLinks: String { return self._s[4237]! } - public var Passport_Identity_ResidenceCountry: String { return self._s[4238]! } - public var Appearance_ThemeCarouselNightBlue: String { return self._s[4240]! } - public var ChatList_ArchiveAction: String { return self._s[4241]! } + public var AutoNightTheme_NotAvailable: String { return self._s[4227]! } + public var Conversation_PressVolumeButtonForSound: String { return self._s[4228]! } + public var LoginPassword_InvalidPasswordError: String { return self._s[4229]! } + public var ChatListFolder_IncludedSectionHeader: String { return self._s[4230]! } + public var Channel_SignMessages_Help: String { return self._s[4231]! } + public var ChatList_DeleteForEveryoneConfirmationTitle: String { return self._s[4232]! } + public var Conversation_TitleNoComments: String { return self._s[4233]! } + public var MediaPicker_LivePhotoDescription: String { return self._s[4234]! } + public var GroupInfo_Permissions: String { return self._s[4235]! } + public var GroupPermission_NoSendLinks: String { return self._s[4238]! } + public var Passport_Identity_ResidenceCountry: String { return self._s[4239]! } + public var Appearance_ThemeCarouselNightBlue: String { return self._s[4241]! } + public var ChatList_ArchiveAction: String { return self._s[4242]! } public func Channel_AdminLog_DisabledSlowmode(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4242]!, self._r[4242]!, [_0]) + return formatWithArgumentRanges(self._s[4243]!, self._r[4243]!, [_0]) } - public var GroupInfo_GroupHistory: String { return self._s[4243]! } + public var GroupInfo_GroupHistory: String { return self._s[4244]! } public func Channel_Management_ErrorNotMember(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4245]!, self._r[4245]!, [_0]) + return formatWithArgumentRanges(self._s[4246]!, self._r[4246]!, [_0]) } - public var Privacy_Forwards_LinkIfAllowed: String { return self._s[4247]! } - public var Channel_Info_Banned: String { return self._s[4248]! } - public var Paint_RecentStickers: String { return self._s[4249]! } - public var VoiceOver_MessageContextSend: String { return self._s[4250]! } - public var Group_ErrorNotMutualContact: String { return self._s[4251]! } - public var ReportPeer_ReasonOther: String { return self._s[4253]! } - public var Channel_BanUser_PermissionChangeGroupInfo: String { return self._s[4254]! } - public var SocksProxySetup_ShareQRCodeInfo: String { return self._s[4256]! } - public var KeyCommand_Find: String { return self._s[4257]! } + public var Privacy_Forwards_LinkIfAllowed: String { return self._s[4248]! } + public var Channel_Info_Banned: String { return self._s[4249]! } + public var Paint_RecentStickers: String { return self._s[4250]! } + public var VoiceOver_MessageContextSend: String { return self._s[4251]! } + public var Group_ErrorNotMutualContact: String { return self._s[4252]! } + public var ReportPeer_ReasonOther: String { return self._s[4254]! } + public var Channel_BanUser_PermissionChangeGroupInfo: String { return self._s[4255]! } + public var SocksProxySetup_ShareQRCodeInfo: String { return self._s[4257]! } + public var KeyCommand_Find: String { return self._s[4258]! } public func Channel_MessageTitleUpdated(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4258]!, self._r[4258]!, [_0]) + return formatWithArgumentRanges(self._s[4259]!, self._r[4259]!, [_0]) } - public var ChatList_Context_Unmute: String { return self._s[4259]! } - public var Chat_SlowmodeAttachmentLimitReached: String { return self._s[4260]! } - public var Stickers_GroupStickersHelp: String { return self._s[4261]! } - public var Wallet_Configuration_BlockchainIdPlaceholder: String { return self._s[4262]! } - public var Checkout_Title: String { return self._s[4263]! } - public var Activity_RecordingAudio: String { return self._s[4264]! } - public var SettingsSearch_Synonyms_Notifications_GroupNotificationsPreview: String { return self._s[4265]! } - public var BlockedUsers_BlockTitle: String { return self._s[4266]! } - public var Wallet_Month_ShortFebruary: String { return self._s[4268]! } - public var Calls_All: String { return self._s[4269]! } - public var DialogList_SavedMessagesHelp: String { return self._s[4271]! } - public var Settings_FAQ_Button: String { return self._s[4272]! } + public var ChatList_Context_Unmute: String { return self._s[4260]! } + public var Chat_SlowmodeAttachmentLimitReached: String { return self._s[4261]! } + public var Stickers_GroupStickersHelp: String { return self._s[4262]! } + public var Wallet_Configuration_BlockchainIdPlaceholder: String { return self._s[4263]! } + public var Checkout_Title: String { return self._s[4264]! } + public var Activity_RecordingAudio: String { return self._s[4265]! } + public var SettingsSearch_Synonyms_Notifications_GroupNotificationsPreview: String { return self._s[4266]! } + public var BlockedUsers_BlockTitle: String { return self._s[4267]! } + public var Wallet_Month_ShortFebruary: String { return self._s[4269]! } + public var Calls_All: String { return self._s[4270]! } + public var DialogList_SavedMessagesHelp: String { return self._s[4272]! } + public var Settings_FAQ_Button: String { return self._s[4273]! } public func Time_MonthOfYear_m5(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4274]!, self._r[4274]!, [_0]) + return formatWithArgumentRanges(self._s[4275]!, self._r[4275]!, [_0]) } - public var Conversation_ReportGroupLocation: String { return self._s[4275]! } - public var Passport_Scans_Upload: String { return self._s[4276]! } - public var Channel_EditAdmin_PermissionPinMessages: String { return self._s[4278]! } - public var ChatList_UnarchiveAction: String { return self._s[4279]! } - public var Stats_GroupTopInviter_History: String { return self._s[4280]! } - public var GroupInfo_Permissions_Title: String { return self._s[4281]! } - public var Passport_Language_el: String { return self._s[4282]! } + public var Conversation_ReportGroupLocation: String { return self._s[4276]! } + public var Passport_Scans_Upload: String { return self._s[4277]! } + public var Channel_EditAdmin_PermissionPinMessages: String { return self._s[4279]! } + public var ChatList_UnarchiveAction: String { return self._s[4280]! } + public var Stats_GroupTopInviter_History: String { return self._s[4281]! } + public var GroupInfo_Permissions_Title: String { return self._s[4282]! } + public var Passport_Language_el: String { return self._s[4283]! } public func Wallet_Time_PreciseDate_m4(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4283]!, self._r[4283]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[4284]!, self._r[4284]!, [_1, _2, _3]) } - public var Channel_DiscussionMessageUnavailable: String { return self._s[4284]! } - public var GroupInfo_ActionPromote: String { return self._s[4285]! } - public var Group_OwnershipTransfer_ErrorLocatedGroupsTooMuch: String { return self._s[4286]! } + public var Channel_DiscussionMessageUnavailable: String { return self._s[4285]! } + public var GroupInfo_ActionPromote: String { return self._s[4286]! } + public var Group_OwnershipTransfer_ErrorLocatedGroupsTooMuch: String { return self._s[4287]! } public func TwoStepAuth_PendingEmailHelp(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4287]!, self._r[4287]!, [_0]) + return formatWithArgumentRanges(self._s[4288]!, self._r[4288]!, [_0]) } - public var VoiceOver_Chat_Reply: String { return self._s[4288]! } - public var Month_GenMay: String { return self._s[4289]! } - public var DialogList_DeleteBotConversationConfirmation: String { return self._s[4290]! } - public var Chat_PsaTooltip_covid: String { return self._s[4291]! } - public var Watch_Suggestion_CantTalk: String { return self._s[4292]! } - public var Privacy_GroupsAndChannels_NeverAllow_Title: String { return self._s[4293]! } - public var AppUpgrade_Running: String { return self._s[4294]! } - public var PasscodeSettings_UnlockWithFaceId: String { return self._s[4297]! } - public var Notification_Exceptions_PreviewAlwaysOff: String { return self._s[4298]! } - public var SharedMedia_EmptyText: String { return self._s[4299]! } - public var Passport_Address_EditResidentialAddress: String { return self._s[4300]! } - public var SettingsSearch_Synonyms_Notifications_GroupNotificationsAlert: String { return self._s[4301]! } - public var Message_PinnedGame: String { return self._s[4302]! } - public var KeyCommand_SearchInChat: String { return self._s[4303]! } - public var Appearance_ThemeCarouselNewNight: String { return self._s[4304]! } - public var ChatList_Search_FilterMedia: String { return self._s[4305]! } - public var Message_PinnedAudioMessage: String { return self._s[4306]! } - public var ChannelInfo_ConfirmLeave: String { return self._s[4307]! } + public var VoiceOver_Chat_Reply: String { return self._s[4289]! } + public var Month_GenMay: String { return self._s[4290]! } + public var DialogList_DeleteBotConversationConfirmation: String { return self._s[4291]! } + public var Chat_PsaTooltip_covid: String { return self._s[4292]! } + public var Watch_Suggestion_CantTalk: String { return self._s[4293]! } + public var Privacy_GroupsAndChannels_NeverAllow_Title: String { return self._s[4294]! } + public var AppUpgrade_Running: String { return self._s[4295]! } + public var PasscodeSettings_UnlockWithFaceId: String { return self._s[4298]! } + public var Notification_Exceptions_PreviewAlwaysOff: String { return self._s[4299]! } + public var SharedMedia_EmptyText: String { return self._s[4300]! } + public var Passport_Address_EditResidentialAddress: String { return self._s[4301]! } + public var SettingsSearch_Synonyms_Notifications_GroupNotificationsAlert: String { return self._s[4302]! } + public var Message_PinnedGame: String { return self._s[4303]! } + public var KeyCommand_SearchInChat: String { return self._s[4304]! } + public var Appearance_ThemeCarouselNewNight: String { return self._s[4305]! } + public var ChatList_Search_FilterMedia: String { return self._s[4306]! } + public var Message_PinnedAudioMessage: String { return self._s[4307]! } + public var ChannelInfo_ConfirmLeave: String { return self._s[4308]! } public func Channel_AdminLog_MessagePromotedNameUsername(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4308]!, self._r[4308]!, [_1, _2]) + return formatWithArgumentRanges(self._s[4309]!, self._r[4309]!, [_1, _2]) } - public var SocksProxySetup_ProxyStatusUnavailable: String { return self._s[4309]! } + public var SocksProxySetup_ProxyStatusUnavailable: String { return self._s[4310]! } public func Passport_Email_CodeHelp(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4310]!, self._r[4310]!, [_0]) + return formatWithArgumentRanges(self._s[4311]!, self._r[4311]!, [_0]) } - public var Wallet_Receive_AddressCopied: String { return self._s[4311]! } + public var Wallet_Receive_AddressCopied: String { return self._s[4312]! } public func Message_PinnedTextMessage(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4312]!, self._r[4312]!, [_0]) + return formatWithArgumentRanges(self._s[4313]!, self._r[4313]!, [_0]) } - public var Settings_AddAccount: String { return self._s[4313]! } - public var Channel_AdminLog_CanDeleteMessages: String { return self._s[4314]! } - public var Conversation_DiscardVoiceMessageTitle: String { return self._s[4315]! } - public var Channel_JoinChannel: String { return self._s[4316]! } - public var Watch_UserInfo_Unblock: String { return self._s[4317]! } - public var PhoneLabel_Title: String { return self._s[4318]! } - public var Group_Setup_HistoryHiddenHelp: String { return self._s[4320]! } - public var Privacy_ProfilePhoto_AlwaysShareWith_Title: String { return self._s[4321]! } + public var Settings_AddAccount: String { return self._s[4314]! } + public var Channel_AdminLog_CanDeleteMessages: String { return self._s[4315]! } + public var Conversation_DiscardVoiceMessageTitle: String { return self._s[4316]! } + public var Channel_JoinChannel: String { return self._s[4317]! } + public var Watch_UserInfo_Unblock: String { return self._s[4318]! } + public var PhoneLabel_Title: String { return self._s[4319]! } + public var Group_Setup_HistoryHiddenHelp: String { return self._s[4321]! } + public var Privacy_ProfilePhoto_AlwaysShareWith_Title: String { return self._s[4322]! } public func Login_PhoneGenericEmailBody(_ _1: String, _ _2: String, _ _3: String, _ _4: String, _ _5: String, _ _6: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4322]!, self._r[4322]!, [_1, _2, _3, _4, _5, _6]) + return formatWithArgumentRanges(self._s[4323]!, self._r[4323]!, [_1, _2, _3, _4, _5, _6]) } - public var Wallet_Month_GenOctober: String { return self._s[4323]! } - public var Channel_AddBotErrorHaveRights: String { return self._s[4324]! } - public var ChatList_TabIconFoldersTooltipNonEmptyFolders: String { return self._s[4325]! } - public var DialogList_EncryptionProcessing: String { return self._s[4326]! } - public var ChatList_Search_FilterChats: String { return self._s[4327]! } - public var WatchRemote_NotificationText: String { return self._s[4328]! } - public var EditTheme_ChangeColors: String { return self._s[4329]! } - public var GroupRemoved_ViewUserInfo: String { return self._s[4330]! } - public var Wallet_TransactionInfo_RecipientHeader: String { return self._s[4331]! } - public var CallSettings_OnMobile: String { return self._s[4333]! } - public var Month_ShortFebruary: String { return self._s[4335]! } - public var VoiceOver_MessageContextReply: String { return self._s[4336]! } + public var Wallet_Month_GenOctober: String { return self._s[4324]! } + public var Channel_AddBotErrorHaveRights: String { return self._s[4325]! } + public var ChatList_TabIconFoldersTooltipNonEmptyFolders: String { return self._s[4326]! } + public var DialogList_EncryptionProcessing: String { return self._s[4327]! } + public var ChatList_Search_FilterChats: String { return self._s[4328]! } + public var WatchRemote_NotificationText: String { return self._s[4329]! } + public var EditTheme_ChangeColors: String { return self._s[4330]! } + public var GroupRemoved_ViewUserInfo: String { return self._s[4331]! } + public var Wallet_TransactionInfo_RecipientHeader: String { return self._s[4332]! } + public var CallSettings_OnMobile: String { return self._s[4334]! } + public var Month_ShortFebruary: String { return self._s[4336]! } + public var VoiceOver_MessageContextReply: String { return self._s[4337]! } public func PUSH_VIDEO_CALL_REQUEST(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4337]!, self._r[4337]!, [_1]) + return formatWithArgumentRanges(self._s[4338]!, self._r[4338]!, [_1]) } - public var Group_Location_ChangeLocation: String { return self._s[4338]! } - public var Passport_Address_TypeBankStatementUploadScan: String { return self._s[4339]! } - public var Wallet_Send_EncryptComment: String { return self._s[4340]! } - public var VoiceOver_Media_PlaybackStop: String { return self._s[4341]! } - public var SettingsSearch_Synonyms_Data_SaveIncomingPhotos: String { return self._s[4342]! } + public var Group_Location_ChangeLocation: String { return self._s[4339]! } + public var Passport_Address_TypeBankStatementUploadScan: String { return self._s[4340]! } + public var Wallet_Send_EncryptComment: String { return self._s[4341]! } + public var VoiceOver_Media_PlaybackStop: String { return self._s[4342]! } + public var SettingsSearch_Synonyms_Data_SaveIncomingPhotos: String { return self._s[4343]! } public func Channel_AdminLog_MessageRestrictedUntil(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4344]!, self._r[4344]!, [_0]) + return formatWithArgumentRanges(self._s[4345]!, self._r[4345]!, [_0]) } - public var PhotoEditor_WarmthTool: String { return self._s[4345]! } - public var Login_InfoAvatarPhoto: String { return self._s[4346]! } - public var Notification_Exceptions_NewException_MessagePreviewHeader: String { return self._s[4347]! } - public var Permissions_CellularDataAllowInSettings_v0: String { return self._s[4348]! } - public var Map_PlacesInThisArea: String { return self._s[4349]! } - public var VoiceOver_Chat_ContactEmail: String { return self._s[4350]! } - public var Notifications_InAppNotificationsSounds: String { return self._s[4351]! } + public var PhotoEditor_WarmthTool: String { return self._s[4346]! } + public var Login_InfoAvatarPhoto: String { return self._s[4347]! } + public var Notification_Exceptions_NewException_MessagePreviewHeader: String { return self._s[4348]! } + public var Permissions_CellularDataAllowInSettings_v0: String { return self._s[4349]! } + public var Map_PlacesInThisArea: String { return self._s[4350]! } + public var VoiceOver_Chat_ContactEmail: String { return self._s[4351]! } + public var Notifications_InAppNotificationsSounds: String { return self._s[4352]! } public func PUSH_PINNED_NOTEXT(_ _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 ShareMenu_Send: String { return self._s[4353]! } - public var Username_InvalidStartsWithNumber: String { return self._s[4354]! } - public var Appearance_AppIconClassicX: String { return self._s[4355]! } + public var ShareMenu_Send: String { return self._s[4354]! } + public var Username_InvalidStartsWithNumber: String { return self._s[4355]! } + public var Appearance_AppIconClassicX: String { return self._s[4356]! } public func PUSH_CHANNEL_MESSAGE_ROUND(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4356]!, self._r[4356]!, [_1]) + return formatWithArgumentRanges(self._s[4357]!, self._r[4357]!, [_1]) } - public var Conversation_StopPoll: String { return self._s[4357]! } - public var InfoPlist_NSLocationAlwaysUsageDescription: String { return self._s[4359]! } - public var Passport_Identity_EditIdentityCard: String { return self._s[4360]! } - public var Appearance_ThemePreview_ChatList_3_Name: String { return self._s[4361]! } - public var Wallet_WordCheck_Title: String { return self._s[4362]! } - public var Conversation_Timer_Title: String { return self._s[4363]! } - public var Common_Next: String { return self._s[4364]! } - public var Notification_Exceptions_NewException: String { return self._s[4365]! } + public var Conversation_StopPoll: String { return self._s[4358]! } + public var InfoPlist_NSLocationAlwaysUsageDescription: String { return self._s[4360]! } + public var Passport_Identity_EditIdentityCard: String { return self._s[4361]! } + public var Appearance_ThemePreview_ChatList_3_Name: String { return self._s[4362]! } + public var Wallet_WordCheck_Title: String { return self._s[4363]! } + public var Conversation_Timer_Title: String { return self._s[4364]! } + public var Common_Next: String { return self._s[4365]! } + public var Notification_Exceptions_NewException: String { return self._s[4366]! } public func Generic_OpenHiddenLinkAlert(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4366]!, self._r[4366]!, [_0]) + return formatWithArgumentRanges(self._s[4367]!, self._r[4367]!, [_0]) } - public var AccessDenied_CallMicrophone: String { return self._s[4367]! } - public var SettingsSearch_Synonyms_Data_AutoDownloadUsingCellular: String { return self._s[4368]! } - public var ChangePhoneNumberCode_Help: String { return self._s[4369]! } - public var Passport_Identity_OneOfTypeIdentityCard: String { return self._s[4370]! } - public var Channel_AdminLogFilter_EventsLeaving: String { return self._s[4371]! } - public var BlockedUsers_LeavePrefix: String { return self._s[4372]! } + public var AccessDenied_CallMicrophone: String { return self._s[4368]! } + public var SettingsSearch_Synonyms_Data_AutoDownloadUsingCellular: String { return self._s[4369]! } + public var ChangePhoneNumberCode_Help: String { return self._s[4370]! } + public var Passport_Identity_OneOfTypeIdentityCard: String { return self._s[4371]! } + public var Channel_AdminLogFilter_EventsLeaving: String { return self._s[4372]! } + public var BlockedUsers_LeavePrefix: String { return self._s[4373]! } public func Passport_RequestHeader(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4373]!, self._r[4373]!, [_0]) + return formatWithArgumentRanges(self._s[4374]!, self._r[4374]!, [_0]) } - public var Group_About_Help: String { return self._s[4374]! } - public var TwoStepAuth_ChangePasswordDescription: String { return self._s[4375]! } - public var Tour_Title3: String { return self._s[4376]! } - public var Watch_Conversation_Unblock: String { return self._s[4377]! } - public var Watch_UserInfo_Block: String { return self._s[4378]! } - public var Notifications_ChannelNotificationsAlert: String { return self._s[4379]! } - public var TwoFactorSetup_Hint_Action: String { return self._s[4380]! } - public var IntentsSettings_SuggestedChatsInfo: String { return self._s[4381]! } - public var Wallet_Alert_Cancel: String { return self._s[4382]! } - public var TextFormat_AddLinkTitle: String { return self._s[4383]! } - public var GroupInfo_InviteLink_RevokeAlert_Revoke: String { return self._s[4384]! } - public var TwoStepAuth_EnterPasswordTitle: String { return self._s[4385]! } - public var FastTwoStepSetup_PasswordSection: String { return self._s[4386]! } - public var Compose_ChannelMembers: String { return self._s[4387]! } - public var Conversation_ForwardTitle: String { return self._s[4388]! } + public var Group_About_Help: String { return self._s[4375]! } + public var TwoStepAuth_ChangePasswordDescription: String { return self._s[4376]! } + public var Tour_Title3: String { return self._s[4377]! } + public var Watch_Conversation_Unblock: String { return self._s[4378]! } + public var Watch_UserInfo_Block: String { return self._s[4379]! } + public var Notifications_ChannelNotificationsAlert: String { return self._s[4380]! } + public var TwoFactorSetup_Hint_Action: String { return self._s[4381]! } + public var IntentsSettings_SuggestedChatsInfo: String { return self._s[4382]! } + public var Wallet_Alert_Cancel: String { return self._s[4383]! } + public var TextFormat_AddLinkTitle: String { return self._s[4384]! } + public var GroupInfo_InviteLink_RevokeAlert_Revoke: String { return self._s[4385]! } + public var TwoStepAuth_EnterPasswordTitle: String { return self._s[4386]! } + public var FastTwoStepSetup_PasswordSection: String { return self._s[4387]! } + public var Compose_ChannelMembers: String { return self._s[4388]! } + public var Conversation_ForwardTitle: String { return self._s[4389]! } public func Wallet_Updated_AtDate(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4389]!, self._r[4389]!, [_0]) + return formatWithArgumentRanges(self._s[4390]!, self._r[4390]!, [_0]) } - public var Conversation_PinnedPoll: String { return self._s[4391]! } + public var Conversation_PinnedPoll: String { return self._s[4392]! } public func VoiceOver_Chat_AnonymousPollFrom(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4392]!, self._r[4392]!, [_0]) + return formatWithArgumentRanges(self._s[4393]!, self._r[4393]!, [_0]) } - public var SettingsSearch_Synonyms_EditProfile_AddAccount: String { return self._s[4393]! } - public var Conversation_ContextMenuStickerPackAdd: String { return self._s[4394]! } - public var Stats_Overview: String { return self._s[4395]! } - public var Map_HomeAndWorkTitle: String { return self._s[4396]! } - public var Wallet_Intro_Terms: String { return self._s[4397]! } + public var SettingsSearch_Synonyms_EditProfile_AddAccount: String { return self._s[4394]! } + public var Conversation_ContextMenuStickerPackAdd: String { return self._s[4395]! } + public var Stats_Overview: String { return self._s[4396]! } + public var Map_HomeAndWorkTitle: String { return self._s[4397]! } + public var Wallet_Intro_Terms: String { return self._s[4398]! } public func Time_PreciseDate_m4(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4398]!, self._r[4398]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[4399]!, self._r[4399]!, [_1, _2, _3]) } - public var Passport_Address_CityPlaceholder: String { return self._s[4399]! } - public var InfoPlist_NSLocationAlwaysAndWhenInUseUsageDescription: String { return self._s[4400]! } - public var Privacy_PhoneNumber: String { return self._s[4401]! } - public var ChatList_Search_FilterFiles: String { return self._s[4402]! } - public var ChatList_DeleteForEveryoneConfirmationAction: String { return self._s[4403]! } - public var ChannelIntro_CreateChannel: String { return self._s[4404]! } - public var Conversation_InputTextAnonymousPlaceholder: String { return self._s[4405]! } + public var Passport_Address_CityPlaceholder: String { return self._s[4400]! } + public var InfoPlist_NSLocationAlwaysAndWhenInUseUsageDescription: String { return self._s[4401]! } + public var Privacy_PhoneNumber: String { return self._s[4402]! } + public var ChatList_Search_FilterFiles: String { return self._s[4403]! } + public var ChatList_DeleteForEveryoneConfirmationAction: String { return self._s[4404]! } + public var ChannelIntro_CreateChannel: String { return self._s[4405]! } + public var Conversation_InputTextAnonymousPlaceholder: String { return self._s[4406]! } public func Login_EmailCodeBody(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4406]!, self._r[4406]!, [_0]) + return formatWithArgumentRanges(self._s[4407]!, self._r[4407]!, [_0]) } - public var Weekday_ShortMonday: String { return self._s[4407]! } - public var Passport_Language_ar: String { return self._s[4409]! } - public var SettingsSearch_Synonyms_EditProfile_Title: String { return self._s[4410]! } - public var TwoFactorSetup_Done_Title: String { return self._s[4411]! } - public var Calls_RatingFeedback: String { return self._s[4412]! } - public var SettingsSearch_Synonyms_Notifications_ChannelNotificationsPreview: String { return self._s[4413]! } - public var AutoDownloadSettings_ResetSettings: String { return self._s[4416]! } - public var Watch_Compose_Send: String { return self._s[4417]! } - public var PasscodeSettings_ChangePasscode: String { return self._s[4418]! } - public var WebSearch_RecentSectionClear: String { return self._s[4419]! } + public var Weekday_ShortMonday: String { return self._s[4408]! } + public var Passport_Language_ar: String { return self._s[4410]! } + public var SettingsSearch_Synonyms_EditProfile_Title: String { return self._s[4411]! } + public var TwoFactorSetup_Done_Title: String { return self._s[4412]! } + public var Calls_RatingFeedback: String { return self._s[4413]! } + public var SettingsSearch_Synonyms_Notifications_ChannelNotificationsPreview: String { return self._s[4414]! } + public var AutoDownloadSettings_ResetSettings: String { return self._s[4417]! } + public var Watch_Compose_Send: String { return self._s[4418]! } + public var PasscodeSettings_ChangePasscode: String { return self._s[4419]! } + public var WebSearch_RecentSectionClear: String { return self._s[4420]! } public func Contacts_AccessDeniedHelpPortrait(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4420]!, self._r[4420]!, [_0]) + return formatWithArgumentRanges(self._s[4421]!, self._r[4421]!, [_0]) } - public var WallpaperSearch_ColorTeal: String { return self._s[4421]! } - public var Wallpaper_SetCustomBackgroundInfo: String { return self._s[4422]! } - public var Permissions_ContactsTitle_v0: String { return self._s[4423]! } - public var Checkout_PasswordEntry_Pay: String { return self._s[4425]! } - public var Settings_SavedMessages: String { return self._s[4426]! } - public var TwoStepAuth_ReEnterPasswordDescription: String { return self._s[4427]! } - public var Month_ShortMarch: String { return self._s[4428]! } - public var Message_Location: String { return self._s[4429]! } + public var WallpaperSearch_ColorTeal: String { return self._s[4422]! } + public var Wallpaper_SetCustomBackgroundInfo: String { return self._s[4423]! } + public var Permissions_ContactsTitle_v0: String { return self._s[4424]! } + public var Checkout_PasswordEntry_Pay: String { return self._s[4426]! } + public var Settings_SavedMessages: String { return self._s[4427]! } + public var TwoStepAuth_ReEnterPasswordDescription: String { return self._s[4428]! } + public var Month_ShortMarch: String { return self._s[4429]! } + public var Message_Location: String { return self._s[4430]! } public func PUSH_MESSAGE_GIF(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4430]!, self._r[4430]!, [_1]) + return formatWithArgumentRanges(self._s[4431]!, self._r[4431]!, [_1]) } public func Notification_CallTimeFormat(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4431]!, self._r[4431]!, [_1, _2]) + return formatWithArgumentRanges(self._s[4432]!, self._r[4432]!, [_1, _2]) } - public var VoiceOver_Chat_VoiceMessage: String { return self._s[4433]! } + public var VoiceOver_Chat_VoiceMessage: String { return self._s[4434]! } public func Channel_AdminLog_MessageChangedUnlinkedChannel(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4434]!, self._r[4434]!, [_1, _2]) + return formatWithArgumentRanges(self._s[4435]!, self._r[4435]!, [_1, _2]) } - public var GroupPermission_NoSendMedia: String { return self._s[4435]! } - public var Conversation_ClousStorageInfo_Description2: String { return self._s[4436]! } - public var SharedMedia_CategoryDocs: String { return self._s[4437]! } - public var Appearance_RemoveThemeConfirmation: String { return self._s[4438]! } - public var Paint_Framed: String { return self._s[4439]! } - public var Channel_EditAdmin_PermissionAddAdmins: String { return self._s[4440]! } - public var Passport_Identity_DoesNotExpire: String { return self._s[4441]! } - public var Channel_SignMessages: String { return self._s[4442]! } - public var Contacts_AccessDeniedHelpON: String { return self._s[4443]! } - public var Conversation_ContextMenuStickerPackInfo: String { return self._s[4444]! } + public var GroupPermission_NoSendMedia: String { return self._s[4436]! } + public var Conversation_ClousStorageInfo_Description2: String { return self._s[4437]! } + public var SharedMedia_CategoryDocs: String { return self._s[4438]! } + public var Appearance_RemoveThemeConfirmation: String { return self._s[4439]! } + public var Paint_Framed: String { return self._s[4440]! } + public var Channel_EditAdmin_PermissionAddAdmins: String { return self._s[4441]! } + public var Passport_Identity_DoesNotExpire: String { return self._s[4442]! } + public var Channel_SignMessages: String { return self._s[4443]! } + public var Contacts_AccessDeniedHelpON: String { return self._s[4444]! } + public var Conversation_ContextMenuStickerPackInfo: String { return self._s[4445]! } public func PUSH_CHAT_LEFT(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4445]!, self._r[4445]!, [_1, _2]) + return formatWithArgumentRanges(self._s[4446]!, self._r[4446]!, [_1, _2]) } - public var GroupInfo_UpgradeButton: String { return self._s[4446]! } - public var Channel_EditAdmin_PermissionInviteMembers: String { return self._s[4447]! } - public var AutoDownloadSettings_Files: String { return self._s[4448]! } + public var GroupInfo_UpgradeButton: String { return self._s[4447]! } + public var Channel_EditAdmin_PermissionInviteMembers: String { return self._s[4448]! } + public var AutoDownloadSettings_Files: String { return self._s[4449]! } public func Notification_ChangedGroupName(_ _0: String, _ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4449]!, self._r[4449]!, [_0, _1]) + return formatWithArgumentRanges(self._s[4450]!, self._r[4450]!, [_0, _1]) } - public var Login_SendCodeViaSms: String { return self._s[4451]! } - public var Update_UpdateApp: String { return self._s[4452]! } - public var Channel_Setup_TypePublic: String { return self._s[4453]! } - public var Watch_Compose_CreateMessage: String { return self._s[4454]! } + public var Login_SendCodeViaSms: String { return self._s[4452]! } + public var Update_UpdateApp: String { return self._s[4453]! } + public var Channel_Setup_TypePublic: String { return self._s[4454]! } + public var Watch_Compose_CreateMessage: String { return self._s[4455]! } public func PUSH_CHAT_MESSAGE_VIDEOS(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4455]!, self._r[4455]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[4456]!, self._r[4456]!, [_1, _2, _3]) } - public var StickerPacksSettings_ManagingHelp: String { return self._s[4456]! } + public var StickerPacksSettings_ManagingHelp: String { return self._s[4457]! } public func Wallet_Time_PreciseDate_m12(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4457]!, self._r[4457]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[4458]!, self._r[4458]!, [_1, _2, _3]) } - public var VoiceOver_Chat_Video: String { return self._s[4458]! } - public var Forward_ChannelReadOnly: String { return self._s[4459]! } - public var StickerPack_HideStickers: String { return self._s[4460]! } - public var ChatListFolder_NameContacts: String { return self._s[4461]! } - public var Profile_BotInfo: String { return self._s[4462]! } - public var Document_TargetConfirmationFormat: String { return self._s[4463]! } - public var GroupInfo_InviteByLink: String { return self._s[4464]! } - public var Channel_AdminLog_BanSendStickersAndGifs: String { return self._s[4465]! } - public var Watch_Stickers_RecentPlaceholder: String { return self._s[4466]! } - public var Broadcast_AdminLog_EmptyText: String { return self._s[4467]! } - public var Passport_NotLoggedInMessage: String { return self._s[4468]! } - public var Conversation_StopQuizConfirmation: String { return self._s[4469]! } - public var Checkout_PaymentMethod: String { return self._s[4470]! } - public var ChatList_ArchivedChatsTitle: String { return self._s[4474]! } - public var TwoStepAuth_SetupPasswordConfirmFailed: String { return self._s[4475]! } - public var VoiceOver_Chat_RecordPreviewVoiceMessage: String { return self._s[4476]! } - public var PrivacyLastSeenSettings_GroupsAndChannelsHelp: String { return self._s[4477]! } - public var SettingsSearch_Synonyms_Privacy_Data_ContactsReset: String { return self._s[4478]! } - public var Camera_Title: String { return self._s[4479]! } - public var Map_Directions: String { return self._s[4480]! } - public var Wallet_Intro_ImportExisting: String { return self._s[4481]! } - public var Stats_MessagePublicForwardsTitle: String { return self._s[4482]! } - public var Privacy_ProfilePhoto_WhoCanSeeMyPhoto: String { return self._s[4484]! } - public var Profile_EncryptionKey: String { return self._s[4485]! } + public var VoiceOver_Chat_Video: String { return self._s[4459]! } + public var Forward_ChannelReadOnly: String { return self._s[4460]! } + public var StickerPack_HideStickers: String { return self._s[4461]! } + public var ChatListFolder_NameContacts: String { return self._s[4462]! } + public var Profile_BotInfo: String { return self._s[4463]! } + public var Document_TargetConfirmationFormat: String { return self._s[4464]! } + public var GroupInfo_InviteByLink: String { return self._s[4465]! } + public var Channel_AdminLog_BanSendStickersAndGifs: String { return self._s[4466]! } + public var Watch_Stickers_RecentPlaceholder: String { return self._s[4467]! } + public var Broadcast_AdminLog_EmptyText: String { return self._s[4468]! } + public var Passport_NotLoggedInMessage: String { return self._s[4469]! } + public var Conversation_StopQuizConfirmation: String { return self._s[4470]! } + public var Checkout_PaymentMethod: String { return self._s[4471]! } + public var ChatList_ArchivedChatsTitle: String { return self._s[4475]! } + public var TwoStepAuth_SetupPasswordConfirmFailed: String { return self._s[4476]! } + public var VoiceOver_Chat_RecordPreviewVoiceMessage: String { return self._s[4477]! } + public var PrivacyLastSeenSettings_GroupsAndChannelsHelp: String { return self._s[4478]! } + public var SettingsSearch_Synonyms_Privacy_Data_ContactsReset: String { return self._s[4479]! } + public var Camera_Title: String { return self._s[4480]! } + public var Map_Directions: String { return self._s[4481]! } + public var Wallet_Intro_ImportExisting: String { return self._s[4482]! } + public var Stats_MessagePublicForwardsTitle: String { return self._s[4483]! } + public var Privacy_ProfilePhoto_WhoCanSeeMyPhoto: String { return self._s[4485]! } + public var Profile_EncryptionKey: String { return self._s[4486]! } public func LOCAL_CHAT_MESSAGE_FWDS(_ _1: String, _ _2: Int) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4486]!, self._r[4486]!, [_1, "\(_2)"]) + return formatWithArgumentRanges(self._s[4487]!, self._r[4487]!, [_1, "\(_2)"]) } public func Compatibility_SecretMediaVersionTooLow(_ _0: String, _ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4487]!, self._r[4487]!, [_0, _1]) + return formatWithArgumentRanges(self._s[4488]!, self._r[4488]!, [_0, _1]) } - public var Passport_Identity_TypePassport: String { return self._s[4488]! } - public var CreatePoll_QuizOptionsHeader: String { return self._s[4490]! } - public var Common_No: String { return self._s[4491]! } - public var Conversation_SendMessage_ScheduleMessage: String { return self._s[4492]! } - public var SettingsSearch_Synonyms_Privacy_LastSeen: String { return self._s[4493]! } - public var Settings_AboutEmpty: String { return self._s[4494]! } - public var TwoStepAuth_FloodError: String { return self._s[4496]! } - public var SettingsSearch_Synonyms_Appearance_TextSize: String { return self._s[4497]! } + public var Passport_Identity_TypePassport: String { return self._s[4489]! } + public var CreatePoll_QuizOptionsHeader: String { return self._s[4491]! } + public var Common_No: String { return self._s[4492]! } + public var Conversation_SendMessage_ScheduleMessage: String { return self._s[4493]! } + public var SettingsSearch_Synonyms_Privacy_LastSeen: String { return self._s[4494]! } + public var Settings_AboutEmpty: String { return self._s[4495]! } + public var TwoStepAuth_FloodError: String { return self._s[4497]! } + public var SettingsSearch_Synonyms_Appearance_TextSize: String { return self._s[4498]! } public func Channel_AdminLog_MessageUnkickedName(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4499]!, self._r[4499]!, [_1]) + return formatWithArgumentRanges(self._s[4500]!, self._r[4500]!, [_1]) } - public var Conversation_Edit: String { return self._s[4502]! } - public var CheckoutInfo_SaveInfo: String { return self._s[4503]! } - public var VoiceOver_Chat_AnonymousPoll: String { return self._s[4504]! } - public var Call_CameraTooltip: String { return self._s[4506]! } - public var InstantPage_FeedbackButtonShort: String { return self._s[4507]! } - public var Contacts_InviteToTelegram: String { return self._s[4508]! } - public var Wallet_WordImport_CanNotRemember: String { return self._s[4509]! } - public var Notifications_ResetAllNotifications: String { return self._s[4510]! } - public var Calls_NewCall: String { return self._s[4511]! } - public var VoiceOver_Chat_Music: String { return self._s[4514]! } - public var Channel_Members_AddAdminErrorNotAMember: String { return self._s[4515]! } - public var Channel_Edit_AboutItem: String { return self._s[4516]! } - public var Message_VideoExpired: String { return self._s[4517]! } - public var Passport_Address_TypeTemporaryRegistrationUploadScan: String { return self._s[4518]! } + public var Conversation_Edit: String { return self._s[4503]! } + public var CheckoutInfo_SaveInfo: String { return self._s[4504]! } + public var VoiceOver_Chat_AnonymousPoll: String { return self._s[4505]! } + public var Call_CameraTooltip: String { return self._s[4507]! } + public var InstantPage_FeedbackButtonShort: String { return self._s[4508]! } + public var Contacts_InviteToTelegram: String { return self._s[4509]! } + public var Wallet_WordImport_CanNotRemember: String { return self._s[4510]! } + public var Notifications_ResetAllNotifications: String { return self._s[4511]! } + public var Calls_NewCall: String { return self._s[4512]! } + public var VoiceOver_Chat_Music: String { return self._s[4515]! } + public var Channel_Members_AddAdminErrorNotAMember: String { return self._s[4516]! } + public var Channel_Edit_AboutItem: String { return self._s[4517]! } + public var Message_VideoExpired: String { return self._s[4518]! } + public var Passport_Address_TypeTemporaryRegistrationUploadScan: String { return self._s[4519]! } public func PUSH_CHAT_RETURNED(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4519]!, self._r[4519]!, [_1, _2]) + return formatWithArgumentRanges(self._s[4520]!, self._r[4520]!, [_1, _2]) } - public var NotificationsSound_Input: String { return self._s[4521]! } - public var Notifications_ClassicTones: String { return self._s[4522]! } - public var Conversation_StatusTyping: String { return self._s[4523]! } - public var Checkout_ErrorProviderAccountInvalid: String { return self._s[4524]! } - public var ChatSettings_AutoDownloadSettings_Delimeter: String { return self._s[4525]! } - public var Wallet_Month_ShortSeptember: String { return self._s[4526]! } - public var SettingsSearch_Synonyms_Notifications_BadgeIncludeMutedChats: String { return self._s[4527]! } - public var Conversation_MessageLeaveComment: String { return self._s[4528]! } - public var UserInfo_TapToCall: String { return self._s[4529]! } - public var EnterPasscode_EnterNewPasscodeNew: String { return self._s[4530]! } - public var Conversation_ClearAll: String { return self._s[4532]! } - public var UserInfo_NotificationsDefault: String { return self._s[4533]! } - public var Wallet_Send_OwnAddressAlertText: String { return self._s[4534]! } - public var Map_ChooseAPlace: String { return self._s[4535]! } + public var NotificationsSound_Input: String { return self._s[4522]! } + public var Notifications_ClassicTones: String { return self._s[4523]! } + public var Conversation_StatusTyping: String { return self._s[4524]! } + public var Checkout_ErrorProviderAccountInvalid: String { return self._s[4525]! } + public var ChatSettings_AutoDownloadSettings_Delimeter: String { return self._s[4526]! } + public var Wallet_Month_ShortSeptember: String { return self._s[4527]! } + public var SettingsSearch_Synonyms_Notifications_BadgeIncludeMutedChats: String { return self._s[4528]! } + public var Conversation_MessageLeaveComment: String { return self._s[4529]! } + public var UserInfo_TapToCall: String { return self._s[4530]! } + public var EnterPasscode_EnterNewPasscodeNew: String { return self._s[4531]! } + public var Conversation_ClearAll: String { return self._s[4533]! } + public var UserInfo_NotificationsDefault: String { return self._s[4534]! } + public var Wallet_Send_OwnAddressAlertText: String { return self._s[4535]! } + public var Map_ChooseAPlace: String { return self._s[4536]! } public func Wallet_Receive_ShareInvoiceUrlInfo(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4536]!, self._r[4536]!, [_0]) + return formatWithArgumentRanges(self._s[4537]!, self._r[4537]!, [_0]) } - public var GroupInfo_AddParticipantTitle: String { return self._s[4537]! } - public var ChatList_PeerTypeNonContact: String { return self._s[4538]! } - public var Conversation_SlideToCancel: String { return self._s[4539]! } - public var Month_ShortJuly: String { return self._s[4540]! } - public var SocksProxySetup_ProxyType: String { return self._s[4541]! } + public var GroupInfo_AddParticipantTitle: String { return self._s[4538]! } + public var ChatList_PeerTypeNonContact: String { return self._s[4539]! } + public var Conversation_SlideToCancel: String { return self._s[4540]! } + public var Month_ShortJuly: String { return self._s[4541]! } + public var SocksProxySetup_ProxyType: String { return self._s[4542]! } public func ChatList_DeleteChatConfirmation(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4542]!, self._r[4542]!, [_0]) + return formatWithArgumentRanges(self._s[4543]!, self._r[4543]!, [_0]) } - public var ChatList_EditFolders: String { return self._s[4543]! } - public var TwoStepAuth_SetPasswordHelp: String { return self._s[4544]! } - public var Wallet_Send_ConfirmationConfirm: String { return self._s[4546]! } - public var Wallet_Created_ExportErrorTitle: String { return self._s[4547]! } + public var ChatList_EditFolders: String { return self._s[4544]! } + public var TwoStepAuth_SetPasswordHelp: String { return self._s[4545]! } + public var Wallet_Send_ConfirmationConfirm: String { return self._s[4547]! } + public var Wallet_Created_ExportErrorTitle: String { return self._s[4548]! } public func GroupPermission_ApplyAlertText(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4548]!, self._r[4548]!, [_0]) + return formatWithArgumentRanges(self._s[4549]!, self._r[4549]!, [_0]) } - public var Permissions_PeopleNearbyTitle_v0: String { return self._s[4549]! } - public var ScheduledMessages_RemindersTitle: String { return self._s[4550]! } - public var Your_cards_expiration_year_is_invalid: String { return self._s[4551]! } - public var Wallet_Info_TransactionPendingHeader: String { return self._s[4553]! } - public var UserInfo_ShareMyContactInfo: String { return self._s[4554]! } - public var Passport_DeleteAddress: String { return self._s[4556]! } - public var Passport_DeletePassportConfirmation: String { return self._s[4557]! } - public var Passport_Identity_ReverseSide: String { return self._s[4558]! } - public var CheckoutInfo_ErrorEmailInvalid: String { return self._s[4559]! } - public var Login_InfoLastNamePlaceholder: String { return self._s[4560]! } - public var Passport_FieldAddress: String { return self._s[4561]! } - public var SettingsSearch_Synonyms_Calls_Title: String { return self._s[4562]! } - public var Passport_Identity_ResidenceCountryPlaceholder: String { return self._s[4564]! } - public var Map_Home: String { return self._s[4566]! } - public var PollResults_Title: String { return self._s[4567]! } - public var ArchivedChats_IntroText2: String { return self._s[4569]! } - public var PasscodeSettings_SimplePasscodeHelp: String { return self._s[4570]! } - public var VoiceOver_Chat_ContactPhoneNumber: String { return self._s[4571]! } - public var CallFeedback_ReasonSilentRemote: String { return self._s[4573]! } - public var Passport_Identity_AddPersonalDetails: String { return self._s[4575]! } - public var Group_Info_AdminLog: String { return self._s[4577]! } - public var ChatSettings_AutoPlayTitle: String { return self._s[4578]! } - public var Appearance_Animations: String { return self._s[4579]! } - public var Appearance_TextSizeSetting: String { return self._s[4580]! } - public func GroupInfo_ShowMoreMembers(_ value: Int32) -> String { + public var Permissions_PeopleNearbyTitle_v0: String { return self._s[4550]! } + public var ScheduledMessages_RemindersTitle: String { return self._s[4551]! } + public var Your_cards_expiration_year_is_invalid: String { return self._s[4552]! } + public var Wallet_Info_TransactionPendingHeader: String { return self._s[4554]! } + public var UserInfo_ShareMyContactInfo: String { return self._s[4555]! } + public var Passport_DeleteAddress: String { return self._s[4557]! } + public var Passport_DeletePassportConfirmation: String { return self._s[4558]! } + public var Passport_Identity_ReverseSide: String { return self._s[4559]! } + public var CheckoutInfo_ErrorEmailInvalid: String { return self._s[4560]! } + public var Login_InfoLastNamePlaceholder: String { return self._s[4561]! } + public var Passport_FieldAddress: String { return self._s[4562]! } + public var SettingsSearch_Synonyms_Calls_Title: String { return self._s[4563]! } + public var Passport_Identity_ResidenceCountryPlaceholder: String { return self._s[4565]! } + public var Map_Home: String { return self._s[4567]! } + public var PollResults_Title: String { return self._s[4568]! } + public var ArchivedChats_IntroText2: String { return self._s[4570]! } + public var PasscodeSettings_SimplePasscodeHelp: String { return self._s[4571]! } + public var VoiceOver_Chat_ContactPhoneNumber: String { return self._s[4572]! } + public var CallFeedback_ReasonSilentRemote: String { return self._s[4574]! } + public var Passport_Identity_AddPersonalDetails: String { return self._s[4576]! } + public var Group_Info_AdminLog: String { return self._s[4578]! } + public var ChatSettings_AutoPlayTitle: String { return self._s[4579]! } + public var Appearance_Animations: String { return self._s[4580]! } + public var Appearance_TextSizeSetting: String { return self._s[4581]! } + public func StickerPack_AddMaskCount(_ 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 PeopleNearby_ShowMorePeople(_ value: Int32) -> String { + public func Wallpaper_DeleteConfirmation(_ 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 OldChannels_InactiveWeek(_ value: Int32) -> String { + public func OldChannels_GroupFormat(_ 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 ForwardedGifs(_ value: Int32) -> String { + public func Stats_GroupTopPosterMessages(_ 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 Invitation_Members(_ value: Int32) -> String { + public func Media_SharePhoto(_ 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 ServiceMessage_GameScoreSelfExtended(_ value: Int32) -> String { + public func LiveLocation_MenuChatsCount(_ 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 LastSeen_HoursAgo(_ value: Int32) -> String { + public func ServiceMessage_GameScoreExtended(_ 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 StickerPack_RemoveMaskCount(_ value: Int32) -> String { + public func ForwardedAudios(_ 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 Call_ShortSeconds(_ 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[8 * 6 + Int(form.rawValue)]!, stringValue) } - public func ForwardedPhotos(_ value: Int32) -> String { + public func Media_ShareItem(_ 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 Forward_ConfirmMultipleFiles(_ 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[10 * 6 + Int(form.rawValue)]!, stringValue) } - public func Stats_MessageViews(_ 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 Notifications_Exceptions(_ 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_Weeks(_ 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 MuteExpires_Minutes(_ 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 MessageTimer_ShortMinutes(_ 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 Stats_GroupTopPosterMessages(_ 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 Media_SharePhoto(_ 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 InviteText_ContactsCountText(_ 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 ServiceMessage_GameScoreSimple(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - 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[20 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Conversation_StatusOnline(_ 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 MessagePoll_QuizCount(_ 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 SharedMedia_DeleteItemsConfirmation(_ 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 Passport_Scans(_ 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 ForwardedContacts(_ 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 SharedMedia_Video(_ 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 ForwardedPolls(_ 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 VoiceOver_Chat_ContactEmailCount(_ 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 Contacts_InviteContacts(_ 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 PUSH_MESSAGE_FWDS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { let form = getPluralizationForm(self.lc, selector) - return String(format: self._ps[31 * 6 + Int(form.rawValue)]!, _1, _2) - } - public func Map_ETAMinutes(_ 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 AttachmentMenu_SendItem(_ 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 VoiceOver_Chat_ContactPhoneNumberCount(_ 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 ChatList_DeletedChats(_ 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 Stats_GroupTopAdminDeletions(_ 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 Notification_GameScoreSelfSimple(_ 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 PUSH_MESSAGES(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { - let form = getPluralizationForm(self.lc, selector) - return String(format: self._ps[38 * 6 + Int(form.rawValue)]!, _1, _2) - } - public func MessageTimer_Hours(_ 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 MuteFor_Hours(_ 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 Notifications_ExceptionMuteExpires_Days(_ 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 MessageTimer_ShortSeconds(_ 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 ForwardedStickers(_ 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 ChatList_MessageVideos(_ 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 ChatList_MessagePhotos(_ 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 Call_Minutes(_ 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_Years(_ 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 ServiceMessage_GameScoreExtended(_ 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 MuteFor_Days(_ 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 StickerPack_AddMaskCount(_ 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_SelectedChats(_ 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 StickerPack_StickerCount(_ 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 Call_ShortMinutes(_ 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 StickerPack_RemoveStickerCount(_ 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 Stats_GroupShowMoreTopPosters(_ 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 PUSH_CHAT_MESSAGE_ROUNDS(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String { - let form = getPluralizationForm(self.lc, selector) - return String(format: self._ps[56 * 6 + Int(form.rawValue)]!, _2, _1, _3) - } - public func LiveLocationUpdated_MinutesAgo(_ 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 Stats_GroupShowMoreTopAdmins(_ 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 Call_Seconds(_ 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_DeleteConfirmation(_ 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 ForwardedFiles(_ 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 Wallet_Updated_MinutesAgo(_ 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 ForwardedAuthorsOthers(_ selector: Int32, _ _0: String, _ _1: String) -> String { - let form = getPluralizationForm(self.lc, selector) - return String(format: self._ps[63 * 6 + Int(form.rawValue)]!, _0, _1) - } - public func Stats_GroupTopAdminBans(_ 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 ChatListFilter_ShowMoreChats(_ 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 PUSH_CHANNEL_MESSAGE_PHOTOS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { - let form = getPluralizationForm(self.lc, selector) - return String(format: self._ps[66 * 6 + Int(form.rawValue)]!, _1, _2) - } - 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[67 * 6 + Int(form.rawValue)]!, stringValue) - } - 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[68 * 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[69 * 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[70 * 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[71 * 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[72 * 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[73 * 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[74 * 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[75 * 6 + Int(form.rawValue)]!, _1, _2) - } - public func Conversation_LiveLocationMembersCount(_ 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 VoiceOver_Chat_PollOptionCount(_ 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 Notification_GameScoreSimple(_ 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_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 PUSH_CHANNEL_MESSAGE_ROUNDS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { - let form = getPluralizationForm(self.lc, selector) - return String(format: self._ps[80 * 6 + Int(form.rawValue)]!, _1, _2) - } - 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[81 * 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[82 * 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[83 * 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[84 * 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[85 * 6 + Int(form.rawValue)]!, stringValue) + return String(format: self._ps[11 * 6 + Int(form.rawValue)]!, _1, _2) } public func Theme_UsersCount(_ 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) + return String(format: self._ps[12 * 6 + Int(form.rawValue)]!, stringValue) } - public func Conversation_SelectedMessages(_ value: Int32) -> String { + public func ForwardedFiles(_ 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) + return String(format: self._ps[13 * 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[88 * 6 + Int(form.rawValue)]!, _1, _2) - } - public func Conversation_StatusSubscribers(_ 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[89 * 6 + Int(form.rawValue)]!, stringValue) + return String(format: self._ps[14 * 6 + Int(form.rawValue)]!, stringValue) } - public func PasscodeSettings_FailedAttempts(_ 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[90 * 6 + Int(form.rawValue)]!, stringValue) + return String(format: self._ps[15 * 6 + Int(form.rawValue)]!, stringValue) } - public func Stats_MessageForwards(_ value: Int32) -> String { + 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[91 * 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[92 * 6 + Int(form.rawValue)]!, _2, _1, _3) - } - public func Stats_GroupTopInviterInvites(_ 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 ForwardedAudios(_ 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) + return String(format: self._ps[16 * 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[95 * 6 + Int(form.rawValue)]!, stringValue) + return String(format: self._ps[17 * 6 + Int(form.rawValue)]!, stringValue) } - public func AttachmentMenu_SendGif(_ value: Int32) -> String { + public func MuteExpires_Days(_ 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 Conversation_StatusMembers(_ 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 PUSH_MESSAGE_PHOTOS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { - let form = getPluralizationForm(self.lc, selector) - return String(format: self._ps[98 * 6 + Int(form.rawValue)]!, _1, _2) - } - public func SharedMedia_Photo(_ 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 PUSH_CHAT_MESSAGE_FWDS(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String { - let form = getPluralizationForm(self.lc, selector) - return String(format: self._ps[100 * 6 + Int(form.rawValue)]!, _2, _1, _3) - } - public func SharedMedia_Generic(_ 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 Watch_UserInfo_Mute(_ 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 MessageTimer_ShortHours(_ 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 PUSH_CHAT_MESSAGE_VIDEOS(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String { - let form = getPluralizationForm(self.lc, selector) - return String(format: self._ps[104 * 6 + Int(form.rawValue)]!, _2, _1, _3) - } - public func PUSH_MESSAGE_ROUNDS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { - let form = getPluralizationForm(self.lc, selector) - return String(format: self._ps[105 * 6 + Int(form.rawValue)]!, _1, _2) - } - public func Wallpaper_DeleteConfirmation(_ 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 PUSH_CHANNEL_MESSAGE_FWDS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { - let form = getPluralizationForm(self.lc, selector) - return String(format: self._ps[107 * 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[108 * 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[109 * 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[110 * 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[111 * 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[112 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Conversation_MessageViewComments(_ 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 MessagePoll_VotedCount(_ 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 CreatePoll_AddMoreOptions(_ 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 Stats_GroupTopAdminKicks(_ 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_MESSAGES(_ 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 PUSH_CHANNEL_MESSAGES(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { - let form = getPluralizationForm(self.lc, selector) - return String(format: self._ps[118 * 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[119 * 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[120 * 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[121 * 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[122 * 6 + Int(form.rawValue)]!, stringValue) - } - public func MessageTimer_Minutes(_ 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 LastSeen_MinutesAgo(_ 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 Media_ShareItem(_ 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 DialogList_LiveLocationChatsCount(_ 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) + return String(format: self._ps[18 * 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[127 * 6 + Int(form.rawValue)]!, stringValue) + return String(format: self._ps[19 * 6 + Int(form.rawValue)]!, stringValue) } - public func Media_ShareVideo(_ value: Int32) -> String { + public func MessageTimer_ShortMinutes(_ 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) + return String(format: self._ps[20 * 6 + Int(form.rawValue)]!, stringValue) } - public func OldChannels_InactiveYear(_ value: Int32) -> String { + public func Notification_GameScoreSimple(_ 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) + return String(format: self._ps[21 * 6 + Int(form.rawValue)]!, stringValue) } - public func MessageTimer_ShortDays(_ value: Int32) -> String { + public func Notification_GameScoreExtended(_ 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) + return String(format: self._ps[22 * 6 + Int(form.rawValue)]!, stringValue) } - public func StickerPack_AddStickerCount(_ value: Int32) -> String { + public func PUSH_MESSAGE_ROUNDS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { + let form = getPluralizationForm(self.lc, selector) + return String(format: self._ps[23 * 6 + Int(form.rawValue)]!, _1, _2) + } + public func ForwardedAuthorsOthers(_ selector: Int32, _ _0: String, _ _1: String) -> String { + let form = getPluralizationForm(self.lc, selector) + return String(format: self._ps[24 * 6 + Int(form.rawValue)]!, _0, _1) + } + public func GroupInfo_ShowMoreMembers(_ 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) + return String(format: self._ps[25 * 6 + Int(form.rawValue)]!, stringValue) } - public func GroupInfo_ParticipantCount(_ value: Int32) -> String { + public func StickerPack_RemoveStickerCount(_ 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) + return String(format: self._ps[26 * 6 + Int(form.rawValue)]!, stringValue) } - public func Notifications_ExceptionMuteExpires_Hours(_ value: Int32) -> String { + public func Notification_GameScoreSelfSimple(_ 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) + return String(format: self._ps[27 * 6 + Int(form.rawValue)]!, stringValue) } - public func Conversation_TitleReplies(_ value: Int32) -> String { + public func LastSeen_HoursAgo(_ 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 OldChannels_GroupFormat(_ 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 Stats_GroupTopPosterChars(_ 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 VoiceOver_Chat_PollVotes(_ 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 SharedMedia_Link(_ 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 Contacts_ImportersCount(_ 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) - } - public func MuteExpires_Hours(_ 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 UserCount(_ 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_Days(_ 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 AttachmentMenu_SendPhoto(_ 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[28 * 6 + Int(form.rawValue)]!, stringValue) } public func ChatList_MessageMusic(_ 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[29 * 6 + Int(form.rawValue)]!, stringValue) } - public func Wallet_Updated_HoursAgo(_ value: Int32) -> String { + public func MessageTimer_Days(_ 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[30 * 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[31 * 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[146 * 6 + Int(form.rawValue)]!, stringValue) + return String(format: self._ps[32 * 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[33 * 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[34 * 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[35 * 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[36 * 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[37 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Stats_MessageViews(_ 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 DialogList_LiveLocationChatsCount(_ 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 Conversation_StatusOnline(_ 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 Watch_LastSeen_MinutesAgo(_ 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_DeleteItemsConfirmation(_ 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 Map_ETAMinutes(_ 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 PUSH_CHANNEL_MESSAGE_VIDEOS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { + let form = getPluralizationForm(self.lc, selector) + return String(format: self._ps[44 * 6 + Int(form.rawValue)]!, _1, _2) + } + public func PUSH_MESSAGE_PHOTOS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { + let form = getPluralizationForm(self.lc, selector) + return String(format: self._ps[45 * 6 + Int(form.rawValue)]!, _1, _2) + } + public func Conversation_StatusSubscribers(_ 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 OldChannels_InactiveMonth(_ 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 MessagePoll_QuizCount(_ 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 Conversation_TitleReplies(_ 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 MessageTimer_Hours(_ 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 InviteText_ContactsCountText(_ 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 PUSH_MESSAGE_VIDEOS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { + let form = getPluralizationForm(self.lc, selector) + return String(format: self._ps[52 * 6 + Int(form.rawValue)]!, _1, _2) + } + public func ForwardedContacts(_ 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 StickerPack_StickerCount(_ 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 Stats_GroupTopPosterChars(_ 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 Stats_GroupShowMoreTopPosters(_ 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 PUSH_MESSAGES(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { + let form = getPluralizationForm(self.lc, selector) + return String(format: self._ps[57 * 6 + Int(form.rawValue)]!, _1, _2) + } + public func ServiceMessage_GameScoreSelfExtended(_ 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 PUSH_CHAT_MESSAGE_PHOTOS(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String { + let form = getPluralizationForm(self.lc, selector) + return String(format: self._ps[59 * 6 + Int(form.rawValue)]!, _2, _1, _3) + } + public func Stats_GroupTopAdminBans(_ 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 ForwardedPolls(_ 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 PUSH_CHAT_MESSAGES(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String { + let form = getPluralizationForm(self.lc, selector) + return String(format: self._ps[62 * 6 + Int(form.rawValue)]!, _2, _1, _3) + } + 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[63 * 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[64 * 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[65 * 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[66 * 6 + Int(form.rawValue)]!, _1, _2) + } + 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[67 * 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[68 * 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[69 * 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[70 * 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[71 * 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[72 * 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[73 * 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[74 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Conversation_MessageViewComments(_ 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 MessageTimer_Seconds(_ 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 MessageTimer_ShortDays(_ 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 PUSH_CHANNEL_MESSAGES(_ 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_Years(_ 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 VoiceOver_Chat_PollVotes(_ 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 Call_ShortSeconds(_ 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 Notifications_ExceptionMuteExpires_Minutes(_ 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 ForwardedPhotos(_ 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 PUSH_CHAT_MESSAGE_FWDS(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String { + let form = getPluralizationForm(self.lc, selector) + return String(format: self._ps[84 * 6 + Int(form.rawValue)]!, _2, _1, _3) + } + public func PUSH_CHANNEL_MESSAGE_ROUNDS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { + let form = getPluralizationForm(self.lc, selector) + return String(format: self._ps[85 * 6 + Int(form.rawValue)]!, _1, _2) + } + 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 ServiceMessage_GameScoreSimple(_ 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 VoiceOver_Chat_PollOptionCount(_ 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 Stats_GroupShowMoreTopInviters(_ 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 PUSH_CHAT_MESSAGE_ROUNDS(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String { + let form = getPluralizationForm(self.lc, selector) + return String(format: self._ps[90 * 6 + Int(form.rawValue)]!, _2, _1, _3) + } + public func SharedMedia_Generic(_ 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 Contacts_ImportersCount(_ 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 Invitation_Members(_ 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 MessageTimer_Months(_ 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 Stats_GroupShowMoreTopAdmins(_ 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 GroupInfo_ParticipantCount(_ 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 Watch_LastSeen_HoursAgo(_ 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 LiveLocationUpdated_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 MessageTimer_Minutes(_ 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_AddStickerCount(_ 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 MessageTimer_Weeks(_ 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 PUSH_CHAT_MESSAGE_VIDEOS(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String { + let form = getPluralizationForm(self.lc, selector) + return String(format: self._ps[103 * 6 + Int(form.rawValue)]!, _2, _1, _3) + } + public func Stats_MessageForwards(_ 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 ForwardedVideos(_ 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 ForwardedStickers(_ 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 Passport_Scans(_ 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 ChatList_MessageVideos(_ 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 PeopleNearby_ShowMorePeople(_ 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_ShortHours(_ 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 ChatList_MessagePhotos(_ 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 OldChannels_Leave(_ 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 Notifications_Exceptions(_ 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 StickerPack_RemoveMaskCount(_ 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 ForwardedMessages(_ 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 Notifications_ExceptionMuteExpires_Hours(_ 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 SharedMedia_Video(_ 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 MuteFor_Hours(_ 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 Call_Seconds(_ 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 Forward_ConfirmMultipleFiles(_ 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 MessageTimer_ShortSeconds(_ 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 Conversation_SelectedMessages(_ 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 AttachmentMenu_SendVideo(_ 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 Stats_GroupTopInviterInvites(_ 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 AttachmentMenu_SendPhoto(_ 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 Stats_GroupTopAdminKicks(_ 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 MuteExpires_Minutes(_ 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 ForwardedVideoMessages(_ 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 PollResults_ShowMore(_ 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 ServiceMessage_GameScoreSelfSimple(_ 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 MessageTimer_ShortWeeks(_ 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 Conversation_StatusMembers(_ 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 SharedMedia_Link(_ 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 Call_ShortMinutes(_ 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 Call_Minutes(_ 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 OldChannels_InactiveWeek(_ 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 SharedMedia_File(_ 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 Stats_GroupTopAdminDeletions(_ 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) + } + public func Notification_GameScoreSelfExtended(_ 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 SharedMedia_Photo(_ 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 PUSH_CHANNEL_MESSAGE_PHOTOS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { + let form = getPluralizationForm(self.lc, selector) + return String(format: self._ps[142 * 6 + Int(form.rawValue)]!, _1, _2) + } + public func AttachmentMenu_SendItem(_ 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 ChatList_Search_Messages(_ 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 Map_ETAHours(_ 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 MuteExpires_Hours(_ 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) + } + public func InstantPage_Views(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[147 * 6 + Int(form.rawValue)]!, stringValue) diff --git a/submodules/TelegramUI/Resources/PresentationStrings.mapping b/submodules/TelegramUI/Resources/PresentationStrings.mapping index 279c431baf..c28771eafc 100644 Binary files a/submodules/TelegramUI/Resources/PresentationStrings.mapping and b/submodules/TelegramUI/Resources/PresentationStrings.mapping differ diff --git a/submodules/TelegramUI/Sources/ChatController.swift b/submodules/TelegramUI/Sources/ChatController.swift index 3b5848794f..389eff8883 100644 --- a/submodules/TelegramUI/Sources/ChatController.swift +++ b/submodules/TelegramUI/Sources/ChatController.swift @@ -3277,13 +3277,15 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G } if case let .replyThread(replyThreadMessageId) = strongSelf.chatLocation { - pinnedMessageId = replyThreadMessageId.messageId + pinnedMessageId = replyThreadMessageId.effectiveTopId } - var pinnedMessage: Message? + var pinnedMessage: ChatPinnedMessage? if let pinnedMessageId = pinnedMessageId { if let cachedDataMessages = combinedInitialData.cachedDataMessages { - pinnedMessage = cachedDataMessages[pinnedMessageId] + if let message = cachedDataMessages[pinnedMessageId] { + pinnedMessage = ChatPinnedMessage(message: message, isLatest: true) + } } } @@ -3394,7 +3396,62 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G let isTopReplyThreadMessageShown: Signal = self.chatDisplayNode.historyNode.isTopReplyThreadMessageShown.get() |> distinctUntilChanged - self.cachedDataDisposable = combineLatest(queue: .mainQueue(), self.chatDisplayNode.historyNode.cachedPeerDataAndMessages, hasPendingMessages, isTopReplyThreadMessageShown).start(next: { [weak self] cachedDataAndMessages, hasPendingMessages, isTopReplyThreadMessageShown in + let topPinnedMessage: Signal + switch self.chatLocation { + case let .peer(peerId): + let replyHistory: Signal = (chatHistoryViewForLocation(ChatHistoryLocationInput(content: .Initial(count: 100), id: 0), context: self.context, chatLocation: .peer(peerId), chatLocationContextHolder: Atomic(value: nil), scheduled: false, fixedCombinedReadStates: nil, tagMask: MessageTags.photoOrVideo, additionalData: []) + |> castError(Bool.self) + |> mapToSignal { update -> Signal in + switch update { + case let .Loading(_, type): + if case .Generic(.FillHole) = type { + return .fail(true) + } + case let .HistoryView(_, type, _, _, _, _, _): + if case .Generic(.FillHole) = type { + return .fail(true) + } + } + return .single(update) + }) + |> restartIfError + + topPinnedMessage = combineLatest( + replyHistory, + self.chatDisplayNode.historyNode.topVisibleMessage.get() + ) + |> map { update, topVisibleMessage -> ChatPinnedMessage? in + var message: ChatPinnedMessage? + switch update { + case .Loading: + break + case let .HistoryView(view, _, _, _, _, _, _): + for i in 0 ..< view.entries.count { + let entry = view.entries[i] + var matches = false + if message == nil { + matches = true + } else if let topVisibleMessage = topVisibleMessage { + if entry.message.id < topVisibleMessage.id { + matches = true + } + } else { + matches = true + } + if matches { + message = ChatPinnedMessage(message: entry.message, isLatest: i == view.entries.count - 1) + } + } + break + } + return message + } + |> distinctUntilChanged + case .replyThread: + topPinnedMessage = .single(nil) + } + + self.cachedDataDisposable = combineLatest(queue: .mainQueue(), self.chatDisplayNode.historyNode.cachedPeerDataAndMessages, hasPendingMessages, isTopReplyThreadMessageShown, topPinnedMessage).start(next: { [weak self] cachedDataAndMessages, hasPendingMessages, isTopReplyThreadMessageShown, topPinnedMessage in if let strongSelf = self { let (cachedData, messages) = cachedDataAndMessages @@ -3422,22 +3479,31 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G } else if let _ = cachedData as? CachedSecretChatData { } + var pinnedMessage: ChatPinnedMessage? if case let .replyThread(replyThreadMessage) = strongSelf.chatLocation { if isTopReplyThreadMessageShown { pinnedMessageId = nil } else { - pinnedMessageId = replyThreadMessage.messageId + pinnedMessageId = replyThreadMessage.effectiveTopId } - } - - var pinnedMessage: Message? - if let pinnedMessageId = pinnedMessageId { - pinnedMessage = messages?[pinnedMessageId] + if let pinnedMessageId = pinnedMessageId { + if let message = messages?[pinnedMessageId] { + pinnedMessage = ChatPinnedMessage(message: message, isLatest: true) + } + } + } else { + if let pinnedMessageId = pinnedMessageId { + if let message = messages?[pinnedMessageId] { + pinnedMessage = ChatPinnedMessage(message: message, isLatest: true) + } + } + //pinnedMessageId = topPinnedMessage?.message.id + //pinnedMessage = topPinnedMessage } var pinnedMessageUpdated = false if let current = strongSelf.presentationInterfaceState.pinnedMessage, let updated = pinnedMessage { - if current.id != updated.id || current.stableVersion != updated.stableVersion { + if current != updated { pinnedMessageUpdated = true } } else if (strongSelf.presentationInterfaceState.pinnedMessage != nil) != (pinnedMessage != nil) { @@ -3446,7 +3512,7 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G let callsDataUpdated = strongSelf.presentationInterfaceState.callsAvailable != callsAvailable || strongSelf.presentationInterfaceState.callsPrivate != callsPrivate - if strongSelf.presentationInterfaceState.pinnedMessageId != pinnedMessageId || strongSelf.presentationInterfaceState.pinnedMessage?.stableVersion != pinnedMessage?.stableVersion || strongSelf.presentationInterfaceState.peerIsBlocked != peerIsBlocked || pinnedMessageUpdated || callsDataUpdated || strongSelf.presentationInterfaceState.slowmodeState != slowmodeState { + if strongSelf.presentationInterfaceState.pinnedMessageId != pinnedMessageId || strongSelf.presentationInterfaceState.pinnedMessage != pinnedMessage || strongSelf.presentationInterfaceState.peerIsBlocked != peerIsBlocked || pinnedMessageUpdated || callsDataUpdated || strongSelf.presentationInterfaceState.slowmodeState != slowmodeState { strongSelf.updateChatPresentationInterfaceState(animated: strongSelf.willAppear, interactive: strongSelf.willAppear, { state in return state .updatedPinnedMessageId(pinnedMessageId) @@ -4743,7 +4809,7 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G })]), in: .window(.root)) } } else { - if let pinnedMessageId = strongSelf.presentationInterfaceState.pinnedMessage?.id { + if let pinnedMessageId = strongSelf.presentationInterfaceState.pinnedMessage?.message.id { strongSelf.updateChatPresentationInterfaceState(animated: true, interactive: true, { return $0.updatedInterfaceState({ $0.withUpdatedMessageActionsState({ value in var value = value @@ -4795,7 +4861,7 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G strongSelf.updateChatPresentationInterfaceState(animated: true, interactive: true, { return $0.updatedInterfaceState({ $0.withUpdatedMessageActionsState({ value in var value = value - value.closedPinnedMessageId = pinnedMessage.id + value.closedPinnedMessageId = pinnedMessage.message.id return value }) }) }) diff --git a/submodules/TelegramUI/Sources/ChatControllerNode.swift b/submodules/TelegramUI/Sources/ChatControllerNode.swift index 949e67c95d..43e4e6865b 100644 --- a/submodules/TelegramUI/Sources/ChatControllerNode.swift +++ b/submodules/TelegramUI/Sources/ChatControllerNode.swift @@ -997,7 +997,7 @@ class ChatControllerNode: ASDisplayNode, UIScrollViewDelegate { } } - if let pinnedMessage = self.chatPresentationInterfaceState.pinnedMessage, self.context.sharedContext.immediateExperimentalUISettings.playerEmbedding, self.context.sharedContext.immediateExperimentalUISettings.playlistPlayback, self.embeddedTitleContentNode == nil, let url = extractExperimentalPlaylistUrl(pinnedMessage.text), self.didProcessExperimentalEmbedUrl != url { + if let pinnedMessage = self.chatPresentationInterfaceState.pinnedMessage, self.context.sharedContext.immediateExperimentalUISettings.playerEmbedding, self.context.sharedContext.immediateExperimentalUISettings.playlistPlayback, self.embeddedTitleContentNode == nil, let url = extractExperimentalPlaylistUrl(pinnedMessage.message.text), self.didProcessExperimentalEmbedUrl != url { self.didProcessExperimentalEmbedUrl = url let context = self.context let baseNavigationController = self.controller?.navigationController as? NavigationController diff --git a/submodules/TelegramUI/Sources/ChatHistoryListNode.swift b/submodules/TelegramUI/Sources/ChatHistoryListNode.swift index 61122e1940..37ed46c24a 100644 --- a/submodules/TelegramUI/Sources/ChatHistoryListNode.swift +++ b/submodules/TelegramUI/Sources/ChatHistoryListNode.swift @@ -24,6 +24,11 @@ extension ChatReplyThreadMessage { } } +struct ChatTopVisibleMessage: Equatable { + var id: MessageId + var isLast: Bool +} + private class ChatHistoryListSelectionRecognizer: UIPanGestureRecognizer { private let selectionGestureActivationThreshold: CGFloat = 5.0 @@ -557,6 +562,7 @@ public final class ChatHistoryListNode: ListView, ChatHistoryNode { private var loadedMessagesFromCachedDataDisposable: Disposable? let isTopReplyThreadMessageShown = ValuePromise(false, ignoreRepeated: true) + let topVisibleMessage = ValuePromise(nil, ignoreRepeated: true) private let clientId: Atomic @@ -1151,6 +1157,7 @@ public final class ChatHistoryListNode: ListView, ChatHistoryNode { private func processDisplayedItemRangeChanged(displayedRange: ListViewDisplayedItemRange, transactionState: ChatHistoryTransactionOpaqueState) { let historyView = transactionState.historyView var isTopReplyThreadMessageShownValue = false + var topVisibleMessage: ChatTopVisibleMessage? if let visible = displayedRange.visibleRange { let indexRange = (historyView.filteredEntries.count - 1 - visible.lastIndex, historyView.filteredEntries.count - 1 - visible.firstIndex) if indexRange.0 > indexRange.1 { @@ -1225,6 +1232,7 @@ public final class ChatHistoryListNode: ListView, ChatHistoryNode { if case let .replyThread(replyThreadMessage) = self.chatLocation, replyThreadMessage.effectiveTopId == message.id { isTopReplyThreadMessageShownValue = true } + topVisibleMessage = ChatTopVisibleMessage(id: message.id, isLast: i == historyView.filteredEntries.count - 1) case let .MessageGroupEntry(_, messages, _): for (message, _, _, _) in messages { var hasUnconsumedMention = false @@ -1255,6 +1263,7 @@ public final class ChatHistoryListNode: ListView, ChatHistoryNode { if case let .replyThread(replyThreadMessage) = self.chatLocation, replyThreadMessage.effectiveTopId == message.id { isTopReplyThreadMessageShownValue = true } + topVisibleMessage = ChatTopVisibleMessage(id: message.id, isLast: i == historyView.filteredEntries.count - 1) } default: break @@ -1371,6 +1380,7 @@ public final class ChatHistoryListNode: ListView, ChatHistoryNode { } } self.isTopReplyThreadMessageShown.set(isTopReplyThreadMessageShownValue) + self.topVisibleMessage.set(topVisibleMessage) if let loaded = displayedRange.loadedRange, let firstEntry = historyView.filteredEntries.first, let lastEntry = historyView.filteredEntries.last { if loaded.firstIndex < 5 && historyView.originalView.laterId != nil { diff --git a/submodules/TelegramUI/Sources/ChatInterfaceStateContextMenus.swift b/submodules/TelegramUI/Sources/ChatInterfaceStateContextMenus.swift index c119f17104..2c57eb9114 100644 --- a/submodules/TelegramUI/Sources/ChatInterfaceStateContextMenus.swift +++ b/submodules/TelegramUI/Sources/ChatInterfaceStateContextMenus.swift @@ -643,7 +643,7 @@ func contextMenuForChatPresentationIntefaceState(chatPresentationInterfaceState: } if data.canPin, case .peer = chatPresentationInterfaceState.chatLocation { - if chatPresentationInterfaceState.pinnedMessage?.id != messages[0].id { + if chatPresentationInterfaceState.pinnedMessage?.message.id != messages[0].id { actions.append(.action(ContextMenuActionItem(text: chatPresentationInterfaceState.strings.Conversation_Pin, icon: { theme in return generateTintedImage(image: UIImage(bundleImageName: "Chat/Context Menu/Pin"), color: theme.actionSheet.primaryTextColor) }, action: { _, f in diff --git a/submodules/TelegramUI/Sources/ChatInterfaceStateContextQueries.swift b/submodules/TelegramUI/Sources/ChatInterfaceStateContextQueries.swift index 1fc95214f1..f3b0b519de 100644 --- a/submodules/TelegramUI/Sources/ChatInterfaceStateContextQueries.swift +++ b/submodules/TelegramUI/Sources/ChatInterfaceStateContextQueries.swift @@ -145,7 +145,7 @@ private func updatedContextQueryResultStateForQuery(context: AccountContext, pee } let inlineBots: Signal<[(Peer, Double)], NoError> = types.contains(.contextBots) ? recentlyUsedInlineBots(postbox: context.account.postbox) : .single([]) - let participants = combineLatest(inlineBots, searchPeerMembers(context: context, peerId: peer.id, chatLocation: chatLocation, query: query)) + let participants = combineLatest(inlineBots, searchPeerMembers(context: context, peerId: peer.id, chatLocation: chatLocation, query: query, scope: .mention)) |> map { inlineBots, peers -> (ChatPresentationInputQueryResult?) -> ChatPresentationInputQueryResult? in let filteredInlineBots = inlineBots.sorted(by: { $0.1 > $1.1 }).filter { peer, rating in if rating < 0.14 { @@ -347,7 +347,7 @@ func searchQuerySuggestionResultStateForChatInterfacePresentationState(_ chatPre } } - let participants = searchPeerMembers(context: context, peerId: peer.id, chatLocation: chatPresentationInterfaceState.chatLocation, query: query) + let participants = searchPeerMembers(context: context, peerId: peer.id, chatLocation: chatPresentationInterfaceState.chatLocation, query: query, scope: .memberSuggestion) |> map { peers -> (ChatPresentationInputQueryResult?) -> ChatPresentationInputQueryResult? in let filteredPeers = peers var sortedPeers: [Peer] = [] diff --git a/submodules/TelegramUI/Sources/ChatInterfaceTitlePanelNodes.swift b/submodules/TelegramUI/Sources/ChatInterfaceTitlePanelNodes.swift index e41c833fcd..9b40aa2467 100644 --- a/submodules/TelegramUI/Sources/ChatInterfaceTitlePanelNodes.swift +++ b/submodules/TelegramUI/Sources/ChatInterfaceTitlePanelNodes.swift @@ -19,7 +19,7 @@ func titlePanelForChatPresentationInterfaceState(_ chatPresentationInterfaceStat loop: for context in chatPresentationInterfaceState.titlePanelContexts.reversed() { switch context { case .pinnedMessage: - if let pinnedMessage = chatPresentationInterfaceState.pinnedMessage, pinnedMessage.id != chatPresentationInterfaceState.interfaceState.messageActionsState.closedPinnedMessageId { + if let pinnedMessage = chatPresentationInterfaceState.pinnedMessage, pinnedMessage.message.id != chatPresentationInterfaceState.interfaceState.messageActionsState.closedPinnedMessageId { selectedContext = context break loop } diff --git a/submodules/TelegramUI/Sources/ChatPinnedMessageTitlePanelNode.swift b/submodules/TelegramUI/Sources/ChatPinnedMessageTitlePanelNode.swift index 4cddcd270a..298dc83e14 100644 --- a/submodules/TelegramUI/Sources/ChatPinnedMessageTitlePanelNode.swift +++ b/submodules/TelegramUI/Sources/ChatPinnedMessageTitlePanelNode.swift @@ -13,10 +13,18 @@ import StickerResources import PhotoResources import TelegramStringFormatting +private enum PinnedMessageAnimation { + case slideToTop + case slideToBottom +} + final class ChatPinnedMessageTitlePanelNode: ChatTitleAccessoryPanelNode { private let context: AccountContext private let tapButton: HighlightTrackingButtonNode private let closeButton: HighlightableButtonNode + + private let clippingContainer: ASDisplayNode + private let contentContainer: ASDisplayNode private let lineNode: ASImageNode private let titleNode: TextNode private let textNode: TextNode @@ -25,7 +33,7 @@ final class ChatPinnedMessageTitlePanelNode: ChatTitleAccessoryPanelNode { private let separatorNode: ASDisplayNode private var currentLayout: (CGFloat, CGFloat, CGFloat)? - private var currentMessage: Message? + private var currentMessage: ChatPinnedMessage? private var previousMediaReference: AnyMediaReference? private var isReplyThread: Bool = false @@ -46,6 +54,11 @@ final class ChatPinnedMessageTitlePanelNode: ChatTitleAccessoryPanelNode { self.separatorNode = ASDisplayNode() self.separatorNode.isLayerBacked = true + self.clippingContainer = ASDisplayNode() + self.clippingContainer.clipsToBounds = true + + self.contentContainer = ASDisplayNode() + self.lineNode = ASImageNode() self.lineNode.displayWithoutProcessing = true self.lineNode.displaysAsynchronously = false @@ -87,10 +100,12 @@ final class ChatPinnedMessageTitlePanelNode: ChatTitleAccessoryPanelNode { self.closeButton.addTarget(self, action: #selector(self.closePressed), forControlEvents: [.touchUpInside]) self.addSubnode(self.closeButton) + self.addSubnode(self.clippingContainer) + self.clippingContainer.addSubnode(self.contentContainer) self.addSubnode(self.lineNode) - self.addSubnode(self.titleNode) - self.addSubnode(self.textNode) - self.addSubnode(self.imageNode) + self.contentContainer.addSubnode(self.titleNode) + self.contentContainer.addSubnode(self.textNode) + self.contentContainer.addSubnode(self.imageNode) self.tapButton.addTarget(self, action: #selector(self.tapped), forControlEvents: [.touchUpInside]) self.addSubnode(self.tapButton) @@ -128,10 +143,18 @@ final class ChatPinnedMessageTitlePanelNode: ChatTitleAccessoryPanelNode { self.closeButton.isHidden = isReplyThread var messageUpdated = false + var messageUpdatedAnimation: PinnedMessageAnimation? if let currentMessage = self.currentMessage, let pinnedMessage = interfaceState.pinnedMessage { - if currentMessage.id != pinnedMessage.id || currentMessage.stableVersion != pinnedMessage.stableVersion { + if currentMessage != pinnedMessage { messageUpdated = true } + if currentMessage.message.id != pinnedMessage.message.id { + if currentMessage.message.id < pinnedMessage.message.id { + messageUpdatedAnimation = .slideToTop + } else { + messageUpdatedAnimation = .slideToBottom + } + } } else if (self.currentMessage != nil) != (interfaceState.pinnedMessage != nil) { messageUpdated = true } @@ -141,7 +164,7 @@ final class ChatPinnedMessageTitlePanelNode: ChatTitleAccessoryPanelNode { self.currentMessage = interfaceState.pinnedMessage if let currentMessage = currentMessage, let currentLayout = self.currentLayout { - self.enqueueTransition(width: currentLayout.0, leftInset: currentLayout.1, rightInset: currentLayout.2, transition: .immediate, message: currentMessage, theme: interfaceState.theme, strings: interfaceState.strings, nameDisplayOrder: interfaceState.nameDisplayOrder, accountPeerId: self.context.account.peerId, firstTime: previousMessageWasNil, isReplyThread: isReplyThread) + self.enqueueTransition(width: currentLayout.0, leftInset: currentLayout.1, rightInset: currentLayout.2, transition: .immediate, animation: messageUpdatedAnimation, pinnedMessage: currentMessage, theme: interfaceState.theme, strings: interfaceState.strings, nameDisplayOrder: interfaceState.nameDisplayOrder, accountPeerId: self.context.account.peerId, firstTime: previousMessageWasNil, isReplyThread: isReplyThread) } } @@ -156,18 +179,43 @@ final class ChatPinnedMessageTitlePanelNode: ChatTitleAccessoryPanelNode { transition.updateFrame(node: self.separatorNode, frame: CGRect(origin: CGPoint(x: 0.0, y: panelHeight - UIScreenPixel), size: CGSize(width: width, height: UIScreenPixel))) self.tapButton.frame = CGRect(origin: CGPoint(), size: CGSize(width: width - rightInset - closeButtonSize.width - 4.0, height: panelHeight)) + self.clippingContainer.frame = CGRect(origin: CGPoint(), size: CGSize(width: width, height: panelHeight)) + self.contentContainer.frame = CGRect(origin: CGPoint(), size: CGSize(width: width, height: panelHeight)) + if self.currentLayout?.0 != width || self.currentLayout?.1 != leftInset || self.currentLayout?.2 != rightInset { self.currentLayout = (width, leftInset, rightInset) if let currentMessage = self.currentMessage { - self.enqueueTransition(width: width, leftInset: leftInset, rightInset: rightInset, transition: .immediate, message: currentMessage, theme: interfaceState.theme, strings: interfaceState.strings, nameDisplayOrder: interfaceState.nameDisplayOrder, accountPeerId: interfaceState.accountPeerId, firstTime: true, isReplyThread: isReplyThread) + self.enqueueTransition(width: width, leftInset: leftInset, rightInset: rightInset, transition: .immediate, animation: .none, pinnedMessage: currentMessage, theme: interfaceState.theme, strings: interfaceState.strings, nameDisplayOrder: interfaceState.nameDisplayOrder, accountPeerId: interfaceState.accountPeerId, firstTime: true, isReplyThread: isReplyThread) } } return panelHeight } - private func enqueueTransition(width: CGFloat, leftInset: CGFloat, rightInset: CGFloat, transition: ContainedViewLayoutTransition, message: Message, theme: PresentationTheme, strings: PresentationStrings, nameDisplayOrder: PresentationPersonNameOrder, accountPeerId: PeerId, firstTime: Bool, isReplyThread: Bool) { + private func enqueueTransition(width: CGFloat, leftInset: CGFloat, rightInset: CGFloat, transition: ContainedViewLayoutTransition, animation: PinnedMessageAnimation?, pinnedMessage: ChatPinnedMessage, theme: PresentationTheme, strings: PresentationStrings, nameDisplayOrder: PresentationPersonNameOrder, accountPeerId: PeerId, firstTime: Bool, isReplyThread: Bool) { + let message = pinnedMessage.message + + if let animation = animation { + let offset: CGFloat + switch animation { + case .slideToTop: + offset = -40.0 + case .slideToBottom: + offset = 40.0 + } + if let copyView = self.contentContainer.view.snapshotView(afterScreenUpdates: false) { + copyView.frame = self.contentContainer.frame + self.clippingContainer.view.addSubview(copyView) + copyView.layer.animatePosition(from: CGPoint(), to: CGPoint(x: 0.0, y: offset), duration: 0.2, removeOnCompletion: false, additive: true) + copyView.layer.animateAlpha(from: 1.0, to: 0.0, duration: 0.2, removeOnCompletion: false, completion: { [weak copyView] _ in + copyView?.removeFromSuperview() + }) + self.contentContainer.layer.animatePosition(from: CGPoint(x: 0.0, y: -offset), to: CGPoint(), duration: 0.2, additive: true) + self.contentContainer.layer.animateAlpha(from: 0.0, to: 1.0, duration: 0.2) + } + } + let makeTitleLayout = TextNode.asyncLayout(self.titleNode) let makeTextLayout = TextNode.asyncLayout(self.textNode) let imageNodeLayout = self.imageNode.asyncLayout() @@ -191,7 +239,12 @@ final class ChatPinnedMessageTitlePanelNode: ChatTitleAccessoryPanelNode { var updatedMediaReference: AnyMediaReference? var imageDimensions: CGSize? - var titleString = strings.Conversation_PinnedMessage + var titleString: String + if pinnedMessage.isLatest { + titleString = strings.Conversation_PinnedMessage + } else { + titleString = strings.Conversation_PinnedPreviousMessage + } for media in message.media { if let image = media as? TelegramMediaImage { @@ -300,13 +353,8 @@ final class ChatPinnedMessageTitlePanelNode: ChatTitleAccessoryPanelNode { if let interfaceInteraction = self.interfaceInteraction, let message = self.currentMessage { if self.isReplyThread { interfaceInteraction.scrollToTop() - /*if let sourceReference = message.sourceReference { - interfaceInteraction.navigateToMessage(sourceReference.messageId, true) - } else { - interfaceInteraction.navigateToMessage(message.id, false) - }*/ } else { - interfaceInteraction.navigateToMessage(message.id, false) + interfaceInteraction.navigateToMessage(message.message.id, false) } } } diff --git a/submodules/TelegramUI/Sources/ChatPresentationInterfaceState.swift b/submodules/TelegramUI/Sources/ChatPresentationInterfaceState.swift index 1be0b8f25f..54f76b2d61 100644 --- a/submodules/TelegramUI/Sources/ChatPresentationInterfaceState.swift +++ b/submodules/TelegramUI/Sources/ChatPresentationInterfaceState.swift @@ -257,6 +257,32 @@ struct ChatSlowmodeState: Equatable { var variant: ChatSlowmodeVariant } +final class ChatPinnedMessage: Equatable { + let message: Message + let isLatest: Bool + + init(message: Message, isLatest: Bool) { + self.message = message + self.isLatest = isLatest + } + + static func ==(lhs: ChatPinnedMessage, rhs: ChatPinnedMessage) -> Bool { + if lhs === rhs { + return true + } + if lhs.message.id != rhs.message.id { + return false + } + if lhs.message.stableVersion != rhs.message.stableVersion { + return false + } + if lhs.isLatest != rhs.isLatest { + return false + } + return true + } +} + final class ChatPresentationInterfaceState: Equatable { let interfaceState: ChatInterfaceState let chatLocation: ChatLocation @@ -274,7 +300,7 @@ final class ChatPresentationInterfaceState: Equatable { let titlePanelContexts: [ChatTitlePanelContext] let keyboardButtonsMessage: Message? let pinnedMessageId: MessageId? - let pinnedMessage: Message? + let pinnedMessage: ChatPinnedMessage? let peerIsBlocked: Bool let peerIsMuted: Bool let peerDiscussionId: PeerId? @@ -348,7 +374,7 @@ final class ChatPresentationInterfaceState: Equatable { self.peerNearbyData = peerNearbyData } - init(interfaceState: ChatInterfaceState, chatLocation: ChatLocation, renderedPeer: RenderedPeer?, isNotAccessible: Bool, explicitelyCanPinMessages: Bool, contactStatus: ChatContactStatus?, hasBots: Bool, isArchived: Bool, inputTextPanelState: ChatTextInputPanelState, editMessageState: ChatEditInterfaceMessageState?, recordedMediaPreview: ChatRecordedMediaPreview?, inputQueryResults: [ChatPresentationInputQueryKind: ChatPresentationInputQueryResult], inputMode: ChatInputMode, titlePanelContexts: [ChatTitlePanelContext], keyboardButtonsMessage: Message?, pinnedMessageId: MessageId?, pinnedMessage: Message?, peerIsBlocked: Bool, peerIsMuted: Bool, peerDiscussionId: PeerId?, peerGeoLocation: PeerGeoLocation?, callsAvailable: Bool, callsPrivate: Bool, slowmodeState: ChatSlowmodeState?, chatHistoryState: ChatHistoryNodeHistoryState?, botStartPayload: String?, urlPreview: (String, TelegramMediaWebpage)?, editingUrlPreview: (String, TelegramMediaWebpage)?, search: ChatSearchData?, searchQuerySuggestionResult: ChatPresentationInputQueryResult?, chatWallpaper: TelegramWallpaper, theme: PresentationTheme, strings: PresentationStrings, dateTimeFormat: PresentationDateTimeFormat, nameDisplayOrder: PresentationPersonNameOrder, limitsConfiguration: LimitsConfiguration, fontSize: PresentationFontSize, bubbleCorners: PresentationChatBubbleCorners, accountPeerId: PeerId, mode: ChatControllerPresentationMode, hasScheduledMessages: Bool, isScheduledMessages: Bool, peerNearbyData: ChatPeerNearbyData?) { + init(interfaceState: ChatInterfaceState, chatLocation: ChatLocation, renderedPeer: RenderedPeer?, isNotAccessible: Bool, explicitelyCanPinMessages: Bool, contactStatus: ChatContactStatus?, hasBots: Bool, isArchived: Bool, inputTextPanelState: ChatTextInputPanelState, editMessageState: ChatEditInterfaceMessageState?, recordedMediaPreview: ChatRecordedMediaPreview?, inputQueryResults: [ChatPresentationInputQueryKind: ChatPresentationInputQueryResult], inputMode: ChatInputMode, titlePanelContexts: [ChatTitlePanelContext], keyboardButtonsMessage: Message?, pinnedMessageId: MessageId?, pinnedMessage: ChatPinnedMessage?, peerIsBlocked: Bool, peerIsMuted: Bool, peerDiscussionId: PeerId?, peerGeoLocation: PeerGeoLocation?, callsAvailable: Bool, callsPrivate: Bool, slowmodeState: ChatSlowmodeState?, chatHistoryState: ChatHistoryNodeHistoryState?, botStartPayload: String?, urlPreview: (String, TelegramMediaWebpage)?, editingUrlPreview: (String, TelegramMediaWebpage)?, search: ChatSearchData?, searchQuerySuggestionResult: ChatPresentationInputQueryResult?, chatWallpaper: TelegramWallpaper, theme: PresentationTheme, strings: PresentationStrings, dateTimeFormat: PresentationDateTimeFormat, nameDisplayOrder: PresentationPersonNameOrder, limitsConfiguration: LimitsConfiguration, fontSize: PresentationFontSize, bubbleCorners: PresentationChatBubbleCorners, accountPeerId: PeerId, mode: ChatControllerPresentationMode, hasScheduledMessages: Bool, isScheduledMessages: Bool, peerNearbyData: ChatPeerNearbyData?) { self.interfaceState = interfaceState self.chatLocation = chatLocation self.renderedPeer = renderedPeer @@ -447,14 +473,7 @@ final class ChatPresentationInterfaceState: Equatable { if lhs.pinnedMessageId != rhs.pinnedMessageId { return false } - if let lhsMessage = lhs.pinnedMessage, let rhsMessage = rhs.pinnedMessage { - if lhsMessage.id != rhsMessage.id { - return false - } - if lhsMessage.stableVersion != rhsMessage.stableVersion { - return false - } - } else if (lhs.pinnedMessage != nil) != (rhs.pinnedMessage != nil) { + if lhs.pinnedMessage != rhs.pinnedMessage { return false } if lhs.callsAvailable != rhs.callsAvailable { @@ -613,7 +632,7 @@ final class ChatPresentationInterfaceState: Equatable { return ChatPresentationInterfaceState(interfaceState: self.interfaceState, chatLocation: self.chatLocation, renderedPeer: self.renderedPeer, isNotAccessible: self.isNotAccessible, explicitelyCanPinMessages: self.explicitelyCanPinMessages, contactStatus: self.contactStatus, hasBots: self.hasBots, isArchived: self.isArchived, inputTextPanelState: self.inputTextPanelState, editMessageState: self.editMessageState, recordedMediaPreview: self.recordedMediaPreview, inputQueryResults: self.inputQueryResults, inputMode: self.inputMode, titlePanelContexts: self.titlePanelContexts, keyboardButtonsMessage: self.keyboardButtonsMessage, pinnedMessageId: pinnedMessageId, pinnedMessage: self.pinnedMessage, peerIsBlocked: self.peerIsBlocked, peerIsMuted: self.peerIsMuted, peerDiscussionId: self.peerDiscussionId, peerGeoLocation: self.peerGeoLocation, callsAvailable: self.callsAvailable, callsPrivate: self.callsPrivate, slowmodeState: self.slowmodeState, chatHistoryState: self.chatHistoryState, botStartPayload: self.botStartPayload, urlPreview: self.urlPreview, editingUrlPreview: self.editingUrlPreview, search: self.search, searchQuerySuggestionResult: self.searchQuerySuggestionResult, chatWallpaper: self.chatWallpaper, theme: self.theme, strings: self.strings, dateTimeFormat: self.dateTimeFormat, nameDisplayOrder: self.nameDisplayOrder, limitsConfiguration: self.limitsConfiguration, fontSize: self.fontSize, bubbleCorners: self.bubbleCorners, accountPeerId: self.accountPeerId, mode: self.mode, hasScheduledMessages: self.hasScheduledMessages, isScheduledMessages: self.isScheduledMessages, peerNearbyData: self.peerNearbyData) } - func updatedPinnedMessage(_ pinnedMessage: Message?) -> ChatPresentationInterfaceState { + func updatedPinnedMessage(_ pinnedMessage: ChatPinnedMessage?) -> ChatPresentationInterfaceState { return ChatPresentationInterfaceState(interfaceState: self.interfaceState, chatLocation: self.chatLocation, renderedPeer: self.renderedPeer, isNotAccessible: self.isNotAccessible, explicitelyCanPinMessages: self.explicitelyCanPinMessages, contactStatus: self.contactStatus, hasBots: self.hasBots, isArchived: self.isArchived, inputTextPanelState: self.inputTextPanelState, editMessageState: self.editMessageState, recordedMediaPreview: self.recordedMediaPreview, inputQueryResults: self.inputQueryResults, inputMode: self.inputMode, titlePanelContexts: self.titlePanelContexts, keyboardButtonsMessage: self.keyboardButtonsMessage, pinnedMessageId: self.pinnedMessageId, pinnedMessage: pinnedMessage, peerIsBlocked: self.peerIsBlocked, peerIsMuted: self.peerIsMuted, peerDiscussionId: self.peerDiscussionId, peerGeoLocation: self.peerGeoLocation, callsAvailable: self.callsAvailable, callsPrivate: self.callsPrivate, slowmodeState: self.slowmodeState, chatHistoryState: self.chatHistoryState, botStartPayload: self.botStartPayload, urlPreview: self.urlPreview, editingUrlPreview: self.editingUrlPreview, search: self.search, searchQuerySuggestionResult: self.searchQuerySuggestionResult, chatWallpaper: self.chatWallpaper, theme: self.theme, strings: self.strings, dateTimeFormat: self.dateTimeFormat, nameDisplayOrder: self.nameDisplayOrder, limitsConfiguration: self.limitsConfiguration, fontSize: self.fontSize, bubbleCorners: self.bubbleCorners, accountPeerId: self.accountPeerId, mode: self.mode, hasScheduledMessages: self.hasScheduledMessages, isScheduledMessages: self.isScheduledMessages, peerNearbyData: self.peerNearbyData) } diff --git a/submodules/TelegramUI/Sources/ChatSearchInputPanelNode.swift b/submodules/TelegramUI/Sources/ChatSearchInputPanelNode.swift index 0f88c5822b..8cbe14652a 100644 --- a/submodules/TelegramUI/Sources/ChatSearchInputPanelNode.swift +++ b/submodules/TelegramUI/Sources/ChatSearchInputPanelNode.swift @@ -189,9 +189,6 @@ final class ChatSearchInputPanelNode: ChatInputPanelNode { canSearchMembers = false } } - if case .replyThread = interfaceState.chatLocation { - canSearchMembers = false - } self.membersButton.isHidden = (!(interfaceState.search?.query.isEmpty ?? true)) || self.displayActivity || !canSearchMembers let resultsEnabled = (resultCount ?? 0) > 0 diff --git a/submodules/TemporaryCachedPeerDataManager/Sources/ChannelMemberCategoryListContext.swift b/submodules/TemporaryCachedPeerDataManager/Sources/ChannelMemberCategoryListContext.swift index 21045ada0f..0b20956993 100644 --- a/submodules/TemporaryCachedPeerDataManager/Sources/ChannelMemberCategoryListContext.swift +++ b/submodules/TemporaryCachedPeerDataManager/Sources/ChannelMemberCategoryListContext.swift @@ -64,6 +64,7 @@ public struct ChannelMemberListState { enum ChannelMemberListCategory { case recent case recentSearch(String) + case mentions(MessageId?, String?) case admins(String?) case contacts(String?) case bots(String?) @@ -211,6 +212,12 @@ private final class ChannelMemberSingleCategoryListContext: ChannelMemberCategor requestCategory = .recent(.all) case let .recentSearch(query): requestCategory = .recent(.search(query)) + case let .mentions(threadId, query): + if let query = query, !query.isEmpty { + requestCategory = .mentions(threadId: threadId, filter: .search(query)) + } else { + requestCategory = .mentions(threadId: threadId, filter: .all) + } case let .admins(query): requestCategory = .admins adminQuery = query @@ -521,6 +528,8 @@ private final class ChannelMemberSingleCategoryListContext: ChannelMemberCategor } } } + case .mentions: + break } } if updatedList { @@ -728,7 +737,7 @@ final class PeerChannelMemberCategoriesContext { emptyTimeout = 0.0 } switch key { - case .recent, .recentSearch, .admins, .contacts, .bots: + case .recent, .recentSearch, .admins, .contacts, .bots, .mentions: let mappedCategory: ChannelMemberListCategory switch key { case .recent: @@ -741,6 +750,8 @@ final class PeerChannelMemberCategoriesContext { mappedCategory = .contacts(query) case let .bots(query): mappedCategory = .bots(query) + case let .mentions(threadId, query): + mappedCategory = .mentions(threadId, query) default: mappedCategory = .recent } diff --git a/submodules/TemporaryCachedPeerDataManager/Sources/PeerChannelMemberCategoriesContextsManager.swift b/submodules/TemporaryCachedPeerDataManager/Sources/PeerChannelMemberCategoriesContextsManager.swift index b5e386a3a8..a2329de73c 100644 --- a/submodules/TemporaryCachedPeerDataManager/Sources/PeerChannelMemberCategoriesContextsManager.swift +++ b/submodules/TemporaryCachedPeerDataManager/Sources/PeerChannelMemberCategoriesContextsManager.swift @@ -8,6 +8,7 @@ import TelegramStringFormatting enum PeerChannelMemberContextKey: Equatable, Hashable { case recent case recentSearch(String) + case mentions(threadId: MessageId?, query: String?) case admins(String?) case contacts(String?) case bots(String?) @@ -321,6 +322,11 @@ public final class PeerChannelMemberCategoriesContextsManager { return self.getContext(postbox: postbox, network: network, accountPeerId: accountPeerId, peerId: peerId, key: key, requestUpdate: requestUpdate, updated: updated) } + public func mentions(postbox: Postbox, network: Network, accountPeerId: PeerId, peerId: PeerId, threadMessageId: MessageId?, searchQuery: String? = nil, requestUpdate: Bool = true, updated: @escaping (ChannelMemberListState) -> Void) -> (Disposable, PeerChannelMemberCategoryControl?) { + let key: PeerChannelMemberContextKey = .mentions(threadId: threadMessageId, query: searchQuery) + return self.getContext(postbox: postbox, network: network, accountPeerId: accountPeerId, peerId: peerId, key: key, requestUpdate: requestUpdate, updated: updated) + } + public func admins(postbox: Postbox, network: Network, accountPeerId: PeerId, peerId: PeerId, searchQuery: String? = nil, updated: @escaping (ChannelMemberListState) -> Void) -> (Disposable, PeerChannelMemberCategoryControl?) { return self.getContext(postbox: postbox, network: network, accountPeerId: accountPeerId, peerId: peerId, key: .admins(searchQuery), requestUpdate: true, updated: updated) }