From 55aa20c2a5b7dcd0c712d5fade5bbbac77938f30 Mon Sep 17 00:00:00 2001 From: Peter <> Date: Fri, 15 Mar 2019 21:13:04 +0400 Subject: [PATCH] Move contacts sync settings back to individual accounts --- .../AuthorizationSequenceController.swift | 34 +- ...rizationSequencePhoneEntryController.swift | 6 +- ...tionSequencePhoneEntryControllerNode.swift | 85 +- TelegramUI/ChatController.swift | 19 + TelegramUI/ChatControllerInteraction.swift | 7 +- TelegramUI/ChatMessageBubbleItemNode.swift | 2 + .../ChatRecentActionsControllerNode.swift | 2 +- TelegramUI/ContactListNode.swift | 7 +- .../ContactSynchronizationSettings.swift | 12 +- TelegramUI/ContactsController.swift | 13 +- .../DataPrivacySettingsController.swift | 30 +- TelegramUI/OverlayPlayerControllerNode.swift | 2 +- .../PeerMediaCollectionController.swift | 2 +- TelegramUI/PresentationStrings.swift | 1237 +++++++++-------- .../Resources/PresentationStrings.mapping | Bin 103643 -> 103680 bytes TelegramUI/UpgradedAccounts.swift | 31 + 16 files changed, 787 insertions(+), 702 deletions(-) diff --git a/TelegramUI/AuthorizationSequenceController.swift b/TelegramUI/AuthorizationSequenceController.swift index f2f90be693..1d6466d00b 100644 --- a/TelegramUI/AuthorizationSequenceController.swift +++ b/TelegramUI/AuthorizationSequenceController.swift @@ -134,10 +134,10 @@ public final class AuthorizationSequenceController: NavigationController, MFMail }).start() } }) - controller.loginWithNumber = { [weak self, weak controller] number in + controller.loginWithNumber = { [weak self, weak controller] number, syncContacts in if let strongSelf = self { controller?.inProgress = true - strongSelf.actionDisposable.set((sendAuthorizationCode(accountManager: strongSelf.sharedContext.accountManager, account: strongSelf.account, phoneNumber: number, apiId: strongSelf.apiId, apiHash: strongSelf.apiHash) |> deliverOnMainQueue).start(next: { [weak self] account in + strongSelf.actionDisposable.set((sendAuthorizationCode(accountManager: strongSelf.sharedContext.accountManager, account: strongSelf.account, phoneNumber: number, apiId: strongSelf.apiId, apiHash: strongSelf.apiHash, syncContacts: syncContacts) |> deliverOnMainQueue).start(next: { [weak self] account in if let strongSelf = self { controller?.inProgress = false strongSelf.account = account @@ -399,7 +399,7 @@ public final class AuthorizationSequenceController: NavigationController, MFMail return controller } - private func passwordEntryController(hint: String, suggestReset: Bool) -> AuthorizationSequencePasswordEntryController { + private func passwordEntryController(hint: String, suggestReset: Bool, syncContacts: Bool) -> AuthorizationSequencePasswordEntryController { var currentController: AuthorizationSequencePasswordEntryController? for c in self.viewControllers { if let c = c as? AuthorizationSequencePasswordEntryController { @@ -425,7 +425,7 @@ public final class AuthorizationSequenceController: NavigationController, MFMail if let strongSelf = self { controller?.inProgress = true - strongSelf.actionDisposable.set((authorizeWithPassword(accountManager: strongSelf.sharedContext.accountManager, account: strongSelf.account, password: password) |> deliverOnMainQueue).start(error: { error in + strongSelf.actionDisposable.set((authorizeWithPassword(accountManager: strongSelf.sharedContext.accountManager, account: strongSelf.account, password: password, syncContacts: syncContacts) |> deliverOnMainQueue).start(error: { error in Queue.mainQueue().async { if let strongSelf = self, let controller = controller { controller.inProgress = false @@ -458,8 +458,8 @@ public final class AuthorizationSequenceController: NavigationController, MFMail switch option { case let .email(pattern): let _ = (strongSelf.account.postbox.transaction { transaction -> Void in - if let state = transaction.getState() as? UnauthorizedAccountState, case let .passwordEntry(hint, number, code, _) = state.contents { - transaction.setState(UnauthorizedAccountState(isTestingEnvironment: strongSelf.account.testingEnvironment, masterDatacenterId: strongSelf.account.masterDatacenterId, contents: .passwordRecovery(hint: hint, number: number, code: code, emailPattern: pattern))) + if let state = transaction.getState() as? UnauthorizedAccountState, case let .passwordEntry(hint, number, code, _, syncContacts) = state.contents { + transaction.setState(UnauthorizedAccountState(isTestingEnvironment: strongSelf.account.testingEnvironment, masterDatacenterId: strongSelf.account.masterDatacenterId, contents: .passwordRecovery(hint: hint, number: number, code: code, emailPattern: pattern, syncContacts: syncContacts))) } }).start() case .none: @@ -507,7 +507,7 @@ public final class AuthorizationSequenceController: NavigationController, MFMail return controller } - private func passwordRecoveryController(emailPattern: String) -> AuthorizationSequencePasswordRecoveryController { + private func passwordRecoveryController(emailPattern: String, syncContacts: Bool) -> AuthorizationSequencePasswordRecoveryController { var currentController: AuthorizationSequencePasswordRecoveryController? for c in self.viewControllers { if let c = c as? AuthorizationSequencePasswordRecoveryController { @@ -533,7 +533,7 @@ public final class AuthorizationSequenceController: NavigationController, MFMail if let strongSelf = self { controller?.inProgress = true - strongSelf.actionDisposable.set((performPasswordRecovery(accountManager: strongSelf.sharedContext.accountManager, account: strongSelf.account, code: code) |> deliverOnMainQueue).start(error: { error in + strongSelf.actionDisposable.set((performPasswordRecovery(accountManager: strongSelf.sharedContext.accountManager, account: strongSelf.account, code: code, syncContacts: syncContacts) |> deliverOnMainQueue).start(error: { error in Queue.mainQueue().async { if let strongSelf = self, let controller = controller { controller.inProgress = false @@ -559,8 +559,8 @@ public final class AuthorizationSequenceController: NavigationController, MFMail controller.present(standardTextAlertController(theme: AlertControllerTheme(presentationTheme: strongSelf.theme), title: nil, text: strongSelf.strings.TwoStepAuth_RecoveryFailed, actions: [TextAlertAction(type: .defaultAction, title: strongSelf.strings.Common_OK, action: {})]), in: .window(.root)) let account = strongSelf.account let _ = (strongSelf.account.postbox.transaction { transaction -> Void in - if let state = transaction.getState() as? UnauthorizedAccountState, case let .passwordRecovery(hint, number, code, _) = state.contents { - transaction.setState(UnauthorizedAccountState(isTestingEnvironment: account.testingEnvironment, masterDatacenterId: account.masterDatacenterId, contents: .passwordEntry(hint: hint, number: number, code: code, suggestReset: true))) + if let state = transaction.getState() as? UnauthorizedAccountState, case let .passwordRecovery(hint, number, code, _, syncContacts) = state.contents { + transaction.setState(UnauthorizedAccountState(isTestingEnvironment: account.testingEnvironment, masterDatacenterId: account.masterDatacenterId, contents: .passwordEntry(hint: hint, number: number, code: code, suggestReset: true, syncContacts: syncContacts))) } }).start() } @@ -715,7 +715,7 @@ public final class AuthorizationSequenceController: NavigationController, MFMail } controllers.append(self.phoneEntryController(countryCode: countryCode, number: number)) self.setViewControllers(controllers, animated: !self.viewControllers.isEmpty) - case let .confirmationCodeEntry(number, type, _, timeout, nextType, termsOfService): + case let .confirmationCodeEntry(number, type, _, timeout, nextType, termsOfService, syncContacts): var controllers: [ViewController] = [] if !self.otherAccountPhoneNumbers.1.isEmpty { controllers.append(self.splashController()) @@ -723,28 +723,28 @@ public final class AuthorizationSequenceController: NavigationController, MFMail controllers.append(self.phoneEntryController(countryCode: defaultCountryCode(), number: "")) controllers.append(self.codeEntryController(number: number, type: type, nextType: nextType, timeout: timeout, termsOfService: termsOfService)) self.setViewControllers(controllers, animated: !self.viewControllers.isEmpty) - case let .passwordEntry(hint, _, _, suggestReset): + case let .passwordEntry(hint, _, _, suggestReset, syncContacts): var controllers: [ViewController] = [] if !self.otherAccountPhoneNumbers.1.isEmpty { controllers.append(self.splashController()) } - controllers.append(self.passwordEntryController(hint: hint, suggestReset: suggestReset)) + controllers.append(self.passwordEntryController(hint: hint, suggestReset: suggestReset, syncContacts: syncContacts)) self.setViewControllers(controllers, animated: !self.viewControllers.isEmpty) - case let .passwordRecovery(_, _, _, emailPattern): + case let .passwordRecovery(_, _, _, emailPattern, syncContacts): var controllers: [ViewController] = [] if !self.otherAccountPhoneNumbers.1.isEmpty { controllers.append(self.splashController()) } - controllers.append(self.passwordRecoveryController(emailPattern: emailPattern)) + controllers.append(self.passwordRecoveryController(emailPattern: emailPattern, syncContacts: syncContacts)) self.setViewControllers(controllers, animated: !self.viewControllers.isEmpty) - case let .awaitingAccountReset(protectedUntil, number): + case let .awaitingAccountReset(protectedUntil, number, _): var controllers: [ViewController] = [] if !self.otherAccountPhoneNumbers.1.isEmpty { controllers.append(self.splashController()) } controllers.append(self.awaitingAccountResetController(protectedUntil: protectedUntil, number: number)) self.setViewControllers(controllers, animated: !self.viewControllers.isEmpty) - case let .signUp(_, _, _, firstName, lastName, termsOfService): + case let .signUp(_, _, _, firstName, lastName, termsOfService, syncContacts): var controllers: [ViewController] = [] if !self.otherAccountPhoneNumbers.1.isEmpty { controllers.append(self.splashController()) diff --git a/TelegramUI/AuthorizationSequencePhoneEntryController.swift b/TelegramUI/AuthorizationSequencePhoneEntryController.swift index eec3370acb..59419eb0a6 100644 --- a/TelegramUI/AuthorizationSequencePhoneEntryController.swift +++ b/TelegramUI/AuthorizationSequencePhoneEntryController.swift @@ -33,7 +33,7 @@ final class AuthorizationSequencePhoneEntryController: ViewController { self.controllerNode.inProgress = self.inProgress } } - var loginWithNumber: ((String) -> Void)? + var loginWithNumber: ((String, Bool) -> Void)? private let termsDisposable = MetaDisposable() @@ -94,7 +94,7 @@ final class AuthorizationSequencePhoneEntryController: ViewController { return } self?.present(debugController(sharedContext: strongSelf.sharedContext, context: nil, modal: true), in: .window(.root), with: ViewControllerPresentationArguments(presentationAnimation: .modalSheet)) - }) + }, hasOtherAccounts: self.otherAccountPhoneNumbers.0 != nil) if let (code, name, number) = self.currentData { self.controllerNode.codeAndNumber = (code, name, number) } @@ -160,7 +160,7 @@ final class AuthorizationSequencePhoneEntryController: ViewController { actions.append(TextAlertAction(type: .defaultAction, title: self.strings.Common_OK, action: {})) self.present(standardTextAlertController(theme: AlertControllerTheme(presentationTheme: self.theme), title: nil, text: self.strings.Login_PhoneNumberAlreadyAuthorized, actions: actions), in: .window(.root)) } else { - self.loginWithNumber?(self.controllerNode.currentNumber) + self.loginWithNumber?(self.controllerNode.currentNumber, self.controllerNode.syncContacts) } } else { hapticFeedback.error() diff --git a/TelegramUI/AuthorizationSequencePhoneEntryControllerNode.swift b/TelegramUI/AuthorizationSequencePhoneEntryControllerNode.swift index bb84c9677a..c66ddebc8b 100644 --- a/TelegramUI/AuthorizationSequencePhoneEntryControllerNode.swift +++ b/TelegramUI/AuthorizationSequencePhoneEntryControllerNode.swift @@ -162,14 +162,42 @@ private final class PhoneAndCountryNode: ASDisplayNode { } } +private final class ContactSyncNode: ASDisplayNode { + private let titleNode: ImmediateTextNode + let switchNode: SwitchNode + + init(theme: PresentationTheme, strings: PresentationStrings) { + self.titleNode = ImmediateTextNode() + self.titleNode.maximumNumberOfLines = 1 + self.titleNode.attributedText = NSAttributedString(string: strings.Privacy_ContactsSync, font: Font.regular(17.0), textColor: theme.list.itemPrimaryTextColor) + self.switchNode = SwitchNode() + self.switchNode.isOn = true + + super.init() + + self.addSubnode(self.titleNode) + self.addSubnode(self.switchNode) + } + + func updateLayout(width: CGFloat) -> CGSize { + let switchSize = CGSize(width: 51.0, height: 31.0) + let titleSize = self.titleNode.updateLayout(CGSize(width: width - switchSize.width - 16.0 * 2.0 - 8.0, height: .greatestFiniteMagnitude)) + let height: CGFloat = 40.0 + self.titleNode.frame = CGRect(origin: CGPoint(x: 16.0, y: floor((height - titleSize.height) / 2.0)), size: titleSize) + self.switchNode.frame = CGRect(origin: CGPoint(x: width - 16.0 - switchSize.width, y: floor((height - switchSize.height) / 2.0)), size: switchSize) + return CGSize(width: width, height: height) + } +} + final class AuthorizationSequencePhoneEntryControllerNode: ASDisplayNode { private let strings: PresentationStrings private let theme: PresentationTheme + private let hasOtherAccounts: Bool private let titleNode: ASTextNode private let noticeNode: ASTextNode private let phoneAndCountryNode: PhoneAndCountryNode - private let termsOfServiceNode: ImmediateTextNode + private let contactSyncNode: ContactSyncNode private let debugAction: () -> Void @@ -185,6 +213,16 @@ final class AuthorizationSequencePhoneEntryControllerNode: ASDisplayNode { } } + var syncContacts: Bool { + get { + if self.hasOtherAccounts { + return self.contactSyncNode.switchNode.isOn + } else { + return true + } + } + } + var selectCountryCode: (() -> Void)? var checkPhone: (() -> Void)? @@ -196,10 +234,11 @@ final class AuthorizationSequencePhoneEntryControllerNode: ASDisplayNode { } } - init(strings: PresentationStrings, theme: PresentationTheme, debugAction: @escaping () -> Void) { + init(strings: PresentationStrings, theme: PresentationTheme, debugAction: @escaping () -> Void, hasOtherAccounts: Bool) { self.strings = strings self.theme = theme self.debugAction = debugAction + self.hasOtherAccounts = hasOtherAccounts self.titleNode = ASTextNode() self.titleNode.isUserInteractionEnabled = true @@ -211,18 +250,7 @@ final class AuthorizationSequencePhoneEntryControllerNode: ASDisplayNode { self.noticeNode.displaysAsynchronously = false self.noticeNode.attributedText = NSAttributedString(string: strings.Login_PhoneAndCountryHelp, font: Font.regular(16.0), textColor: theme.list.itemPrimaryTextColor, paragraphAlignment: .center) - self.termsOfServiceNode = ImmediateTextNode() - self.termsOfServiceNode.maximumNumberOfLines = 0 - self.termsOfServiceNode.textAlignment = .center - self.termsOfServiceNode.displaysAsynchronously = false - - let termsOfServiceAttributes = MarkdownAttributeSet(font: Font.regular(16.0), textColor: self.theme.list.itemPrimaryTextColor) - let termsOfServiceLinkAttributes = MarkdownAttributeSet(font: Font.regular(16.0), textColor: self.theme.list.itemAccentColor, additionalAttributes: [NSAttributedStringKey.underlineStyle.rawValue: NSUnderlineStyle.styleSingle.rawValue as NSNumber, TelegramTextAttributes.URL: ""]) - - let termsString = parseMarkdownIntoAttributedString(self.strings.Login_TermsOfServiceLabel.replacingOccurrences(of: "]", with: "]()"), attributes: MarkdownAttributes(body: termsOfServiceAttributes, bold: termsOfServiceAttributes, link: termsOfServiceLinkAttributes, linkAttribute: { _ in - return nil - }), textAlignment: .center) - self.termsOfServiceNode.attributedText = termsString + self.contactSyncNode = ContactSyncNode(theme: theme, strings: strings) self.phoneAndCountryNode = PhoneAndCountryNode(strings: strings, theme: theme) @@ -235,9 +263,10 @@ final class AuthorizationSequencePhoneEntryControllerNode: ASDisplayNode { self.backgroundColor = theme.list.plainBackgroundColor self.addSubnode(self.titleNode) - //self.addSubnode(self.termsOfServiceNode) self.addSubnode(self.noticeNode) self.addSubnode(self.phoneAndCountryNode) + self.addSubnode(self.contactSyncNode) + self.contactSyncNode.isHidden = true self.phoneAndCountryNode.selectCountryCode = { [weak self] in self?.selectCountryCode?() @@ -245,19 +274,6 @@ final class AuthorizationSequencePhoneEntryControllerNode: ASDisplayNode { self.phoneAndCountryNode.checkPhone = { [weak self] in self?.checkPhone?() } - - self.termsOfServiceNode.highlightAttributeAction = { attributes in - if let _ = attributes[NSAttributedStringKey(rawValue: TelegramTextAttributes.URL)] { - return NSAttributedStringKey(rawValue: TelegramTextAttributes.URL) - } else { - return nil - } - } - self.termsOfServiceNode.tapAttributeAction = { attributes in - if let _ = attributes[NSAttributedStringKey(rawValue: TelegramTextAttributes.URL)] as? String { - } - } - self.termsOfServiceNode.linkHighlightColor = theme.list.itemAccentColor.withAlphaComponent(0.5) } override func didLoad() { @@ -292,14 +308,15 @@ final class AuthorizationSequencePhoneEntryControllerNode: ASDisplayNode { AuthorizationLayoutItem(node: self.noticeNode, size: noticeSize, spacingBefore: AuthorizationLayoutItemSpacing(weight: 18.0, maxValue: 18.0), spacingAfter: AuthorizationLayoutItemSpacing(weight: 0.0, maxValue: 0.0)), AuthorizationLayoutItem(node: self.phoneAndCountryNode, size: CGSize(width: layout.size.width, height: 115.0), spacingBefore: AuthorizationLayoutItemSpacing(weight: 44.0, maxValue: 44.0), spacingAfter: AuthorizationLayoutItemSpacing(weight: 0.0, maxValue: 0.0)) ] - - if layoutAuthorizationItems(bounds: CGRect(origin: CGPoint(x: 0.0, y: insets.top), size: CGSize(width: layout.size.width, height: layout.size.height - insets.top - insets.bottom - 10.0)), items: items, transition: transition, failIfDoesNotFit: true) { - self.termsOfServiceNode.isHidden = false + let contactSyncSize = self.contactSyncNode.updateLayout(width: layout.size.width) + if self.hasOtherAccounts { + self.contactSyncNode.isHidden = false + items.append(AuthorizationLayoutItem(node: self.contactSyncNode, size: contactSyncSize, spacingBefore: AuthorizationLayoutItemSpacing(weight: 16.0, maxValue: 16.0), spacingAfter: AuthorizationLayoutItemSpacing(weight: 0.0, maxValue: 0.0))) } else { - items.removeLast() - let _ = layoutAuthorizationItems(bounds: CGRect(origin: CGPoint(x: 0.0, y: insets.top), size: CGSize(width: layout.size.width, height: layout.size.height - insets.top - insets.bottom - 10.0)), items: items, transition: transition, failIfDoesNotFit: false) - self.termsOfServiceNode.isHidden = true + self.contactSyncNode.isHidden = true } + + let _ = layoutAuthorizationItems(bounds: CGRect(origin: CGPoint(x: 0.0, y: insets.top), size: CGSize(width: layout.size.width, height: layout.size.height - insets.top - insets.bottom - 10.0)), items: items, transition: transition, failIfDoesNotFit: false) } func activateInput() { diff --git a/TelegramUI/ChatController.swift b/TelegramUI/ChatController.swift index 7de58bbe6b..8fdce65068 100644 --- a/TelegramUI/ChatController.swift +++ b/TelegramUI/ChatController.swift @@ -209,6 +209,7 @@ public final class ChatController: TelegramController, KeyShortcutResponder, Gal private weak var silentPostTooltipController: TooltipController? private weak var mediaRecordingModeTooltipController: TooltipController? private weak var mediaRestrictedTooltipController: TooltipController? + private var forwardDisabledNoticeTooltipController: TooltipController? private var mediaRestrictedTooltipControllerMode = true private var screenCaptureEventsDisposable: Disposable? @@ -1158,6 +1159,24 @@ public final class ChatController: TelegramController, KeyShortcutResponder, Gal }, cancelInteractiveKeyboardGestures: { [weak self] in (self?.view.window as? WindowHost)?.cancelInteractiveKeyboardGestures() self?.chatDisplayNode.cancelInteractiveKeyboardGestures() + }, displayForwardDisabledNotice: { [weak self] sourceNode, sourceRect, name in + guard let strongSelf = self else { + return + } + strongSelf.forwardDisabledNoticeTooltipController?.dismiss() + let tooltipController = TooltipController(content: .text(strongSelf.presentationInterfaceState.strings.Chat_ForwardHiddenAccount(name).0), timeout: 2.0, dismissByTapOutside: true) + strongSelf.forwardDisabledNoticeTooltipController = tooltipController + tooltipController.dismissed = { [weak tooltipController] in + if let strongSelf = self, let tooltipController = tooltipController, strongSelf.forwardDisabledNoticeTooltipController === tooltipController { + strongSelf.forwardDisabledNoticeTooltipController = nil + } + } + strongSelf.present(tooltipController, in: .window(.root), with: TooltipControllerPresentationArguments(sourceNodeAndRect: { + if let strongSelf = self { + return (sourceNode, sourceRect) + } + return nil + })) }, automaticMediaDownloadSettings: self.automaticMediaDownloadSettings, pollActionState: ChatInterfacePollActionState()) diff --git a/TelegramUI/ChatControllerInteraction.swift b/TelegramUI/ChatControllerInteraction.swift index 84f45b6a7f..99961269fd 100644 --- a/TelegramUI/ChatControllerInteraction.swift +++ b/TelegramUI/ChatControllerInteraction.swift @@ -90,6 +90,8 @@ public final class ChatControllerInteraction { let requestMessageUpdate: (MessageId) -> Void let cancelInteractiveKeyboardGestures: () -> Void + let displayForwardDisabledNotice: (ASDisplayNode, CGRect, String) -> Void + var hiddenMedia: [MessageId: [Media]] = [:] var selectionState: ChatInterfaceSelectionState? var highlightedState: ChatInterfaceHighlightedState? @@ -98,7 +100,7 @@ public final class ChatControllerInteraction { var pollActionState: ChatInterfacePollActionState var searchTextHighightState: String? - init(openMessage: @escaping (Message, ChatControllerInteractionOpenMessageMode) -> Bool, openPeer: @escaping (PeerId?, ChatControllerInteractionNavigateToPeer, Message?) -> Void, openPeerMention: @escaping (String) -> Void, openMessageContextMenu: @escaping (Message, Bool, ASDisplayNode, CGRect) -> Void, navigateToMessage: @escaping (MessageId, MessageId) -> Void, clickThroughMessage: @escaping () -> Void, toggleMessagesSelection: @escaping ([MessageId], Bool) -> Void, sendMessage: @escaping (String) -> Void, sendSticker: @escaping (FileMediaReference, Bool) -> Void, sendGif: @escaping (FileMediaReference) -> Void, requestMessageActionCallback: @escaping (MessageId, MemoryBuffer?, Bool) -> Void, activateSwitchInline: @escaping (PeerId?, String) -> Void, openUrl: @escaping (String, Bool, Bool?) -> Void, shareCurrentLocation: @escaping () -> Void, shareAccountContact: @escaping () -> Void, sendBotCommand: @escaping (MessageId?, String) -> Void, openInstantPage: @escaping (Message, ChatMessageItemAssociatedData?) -> Void, openWallpaper: @escaping (Message) -> Void, openHashtag: @escaping (String?, String) -> Void, updateInputState: @escaping ((ChatTextInputState) -> ChatTextInputState) -> Void, updateInputMode: @escaping ((ChatInputMode) -> ChatInputMode) -> Void, openMessageShareMenu: @escaping (MessageId) -> Void, presentController: @escaping (ViewController, Any?) -> Void, navigationController: @escaping () -> NavigationController?, presentGlobalOverlayController: @escaping (ViewController, Any?) -> Void, callPeer: @escaping (PeerId) -> Void, longTap: @escaping (ChatControllerInteractionLongTapAction) -> Void, openCheckoutOrReceipt: @escaping (MessageId) -> Void, openSearch: @escaping () -> Void, setupReply: @escaping (MessageId) -> Void, canSetupReply: @escaping (Message) -> Bool, navigateToFirstDateMessage: @escaping(Int32) ->Void, requestRedeliveryOfFailedMessages: @escaping (MessageId) -> Void, addContact: @escaping (String) -> Void, rateCall: @escaping (Message, CallId) -> Void, requestSelectMessagePollOption: @escaping (MessageId, Data) -> Void, openAppStorePage: @escaping () -> Void, requestMessageUpdate: @escaping (MessageId) -> Void, cancelInteractiveKeyboardGestures: @escaping () -> Void, automaticMediaDownloadSettings: MediaAutoDownloadSettings, pollActionState: ChatInterfacePollActionState) { + init(openMessage: @escaping (Message, ChatControllerInteractionOpenMessageMode) -> Bool, openPeer: @escaping (PeerId?, ChatControllerInteractionNavigateToPeer, Message?) -> Void, openPeerMention: @escaping (String) -> Void, openMessageContextMenu: @escaping (Message, Bool, ASDisplayNode, CGRect) -> Void, navigateToMessage: @escaping (MessageId, MessageId) -> Void, clickThroughMessage: @escaping () -> Void, toggleMessagesSelection: @escaping ([MessageId], Bool) -> Void, sendMessage: @escaping (String) -> Void, sendSticker: @escaping (FileMediaReference, Bool) -> Void, sendGif: @escaping (FileMediaReference) -> Void, requestMessageActionCallback: @escaping (MessageId, MemoryBuffer?, Bool) -> Void, activateSwitchInline: @escaping (PeerId?, String) -> Void, openUrl: @escaping (String, Bool, Bool?) -> Void, shareCurrentLocation: @escaping () -> Void, shareAccountContact: @escaping () -> Void, sendBotCommand: @escaping (MessageId?, String) -> Void, openInstantPage: @escaping (Message, ChatMessageItemAssociatedData?) -> Void, openWallpaper: @escaping (Message) -> Void, openHashtag: @escaping (String?, String) -> Void, updateInputState: @escaping ((ChatTextInputState) -> ChatTextInputState) -> Void, updateInputMode: @escaping ((ChatInputMode) -> ChatInputMode) -> Void, openMessageShareMenu: @escaping (MessageId) -> Void, presentController: @escaping (ViewController, Any?) -> Void, navigationController: @escaping () -> NavigationController?, presentGlobalOverlayController: @escaping (ViewController, Any?) -> Void, callPeer: @escaping (PeerId) -> Void, longTap: @escaping (ChatControllerInteractionLongTapAction) -> Void, openCheckoutOrReceipt: @escaping (MessageId) -> Void, openSearch: @escaping () -> Void, setupReply: @escaping (MessageId) -> Void, canSetupReply: @escaping (Message) -> Bool, navigateToFirstDateMessage: @escaping(Int32) ->Void, requestRedeliveryOfFailedMessages: @escaping (MessageId) -> Void, addContact: @escaping (String) -> Void, rateCall: @escaping (Message, CallId) -> Void, requestSelectMessagePollOption: @escaping (MessageId, Data) -> Void, openAppStorePage: @escaping () -> Void, requestMessageUpdate: @escaping (MessageId) -> Void, cancelInteractiveKeyboardGestures: @escaping () -> Void, displayForwardDisabledNotice: @escaping (ASDisplayNode, CGRect, String) -> Void, automaticMediaDownloadSettings: MediaAutoDownloadSettings, pollActionState: ChatInterfacePollActionState) { self.openMessage = openMessage self.openPeer = openPeer self.openPeerMention = openPeerMention @@ -139,6 +141,7 @@ public final class ChatControllerInteraction { self.requestMessageUpdate = requestMessageUpdate self.cancelInteractiveKeyboardGestures = cancelInteractiveKeyboardGestures + self.displayForwardDisabledNotice = displayForwardDisabledNotice self.automaticMediaDownloadSettings = automaticMediaDownloadSettings @@ -161,7 +164,7 @@ public final class ChatControllerInteraction { }, openAppStorePage: { }, requestMessageUpdate: { _ in }, cancelInteractiveKeyboardGestures: { - }, automaticMediaDownloadSettings: MediaAutoDownloadSettings.defaultSettings, + }, displayForwardDisabledNotice: { _, _, _ in }, automaticMediaDownloadSettings: MediaAutoDownloadSettings.defaultSettings, pollActionState: ChatInterfacePollActionState()) } } diff --git a/TelegramUI/ChatMessageBubbleItemNode.swift b/TelegramUI/ChatMessageBubbleItemNode.swift index 92d02ccb31..46443febd2 100644 --- a/TelegramUI/ChatMessageBubbleItemNode.swift +++ b/TelegramUI/ChatMessageBubbleItemNode.swift @@ -1597,6 +1597,8 @@ class ChatMessageBubbleItemNode: ChatMessageItemView { item.controllerInteraction.navigateToMessage(item.message.id, sourceMessageId) } else if let id = forwardInfo.source?.id ?? forwardInfo.author?.id { item.controllerInteraction.openPeer(id, .info, nil) + } else if let authorSignature = forwardInfo.authorSignature { + item.controllerInteraction.displayForwardDisabledNotice(forwardInfoNode, forwardInfoNode.bounds, authorSignature) } return } diff --git a/TelegramUI/ChatRecentActionsControllerNode.swift b/TelegramUI/ChatRecentActionsControllerNode.swift index 462e32dc27..8d8bef05d4 100644 --- a/TelegramUI/ChatRecentActionsControllerNode.swift +++ b/TelegramUI/ChatRecentActionsControllerNode.swift @@ -364,7 +364,7 @@ final class ChatRecentActionsControllerNode: ViewControllerTracingNode { } }, requestMessageUpdate: { _ in }, cancelInteractiveKeyboardGestures: { - }, automaticMediaDownloadSettings: self.automaticMediaDownloadSettings, + }, displayForwardDisabledNotice: { _, _, _ in }, automaticMediaDownloadSettings: self.automaticMediaDownloadSettings, pollActionState: ChatInterfacePollActionState()) self.controllerInteraction = controllerInteraction diff --git a/TelegramUI/ContactListNode.swift b/TelegramUI/ContactListNode.swift index aa13b6221b..d9e8db1408 100644 --- a/TelegramUI/ContactListNode.swift +++ b/TelegramUI/ContactListNode.swift @@ -819,9 +819,10 @@ final class ContactListNode: ASDisplayNode { let contactsWarningSuppressed = Promise<(Bool, Bool)>() contactsWarningSuppressed.set(.single((false, false)) |> then( - combineLatest(context.sharedContext.accountManager.noticeEntry(key: ApplicationSpecificNotice.contactsPermissionWarningKey()), context.sharedContext.accountManager.sharedData(keys: [ApplicationSpecificSharedDataKeys.contactSynchronizationSettings])) - |> map { noticeView, sharedData -> (Bool, Bool) in - let synchronizeDeviceContacts: Bool = (sharedData.entries[ApplicationSpecificSharedDataKeys.contactSynchronizationSettings] as? ContactSynchronizationSettings)?.synchronizeDeviceContacts ?? true + combineLatest(context.sharedContext.accountManager.noticeEntry(key: ApplicationSpecificNotice.contactsPermissionWarningKey()), context.account.postbox.preferencesView(keys: [PreferencesKeys.contactsSettings])) + |> map { noticeView, preferences -> (Bool, Bool) in + let settings: ContactsSettings = preferences.values[PreferencesKeys.contactsSettings] as? ContactsSettings ?? ContactsSettings.defaultSettings + let synchronizeDeviceContacts: Bool = settings.synchronizeContacts let suppressed: Bool let timestamp = noticeView.value.flatMap({ ApplicationSpecificNotice.getTimestampValue($0) }) if let timestamp = timestamp, timestamp > 0 { diff --git a/TelegramUI/ContactSynchronizationSettings.swift b/TelegramUI/ContactSynchronizationSettings.swift index 6f6d8f4903..5b3df8ce67 100644 --- a/TelegramUI/ContactSynchronizationSettings.swift +++ b/TelegramUI/ContactSynchronizationSettings.swift @@ -8,28 +8,28 @@ public enum ContactsSortOrder: Int32 { } public struct ContactSynchronizationSettings: Equatable, PreferencesEntry { - public var synchronizeDeviceContacts: Bool + public var _legacySynchronizeDeviceContacts: Bool public var nameDisplayOrder: PresentationPersonNameOrder public var sortOrder: ContactsSortOrder public static var defaultSettings: ContactSynchronizationSettings { - return ContactSynchronizationSettings(synchronizeDeviceContacts: true, nameDisplayOrder: .firstLast, sortOrder: .presence) + return ContactSynchronizationSettings(_legacySynchronizeDeviceContacts: true, nameDisplayOrder: .firstLast, sortOrder: .presence) } - public init(synchronizeDeviceContacts: Bool, nameDisplayOrder: PresentationPersonNameOrder, sortOrder: ContactsSortOrder) { - self.synchronizeDeviceContacts = synchronizeDeviceContacts + public init(_legacySynchronizeDeviceContacts: Bool, nameDisplayOrder: PresentationPersonNameOrder, sortOrder: ContactsSortOrder) { + self._legacySynchronizeDeviceContacts = _legacySynchronizeDeviceContacts self.nameDisplayOrder = nameDisplayOrder self.sortOrder = sortOrder } public init(decoder: PostboxDecoder) { - self.synchronizeDeviceContacts = decoder.decodeInt32ForKey("synchronizeDeviceContacts", orElse: 0) != 0 + self._legacySynchronizeDeviceContacts = decoder.decodeInt32ForKey("synchronizeDeviceContacts", orElse: 0) != 0 self.nameDisplayOrder = PresentationPersonNameOrder(rawValue: decoder.decodeInt32ForKey("nameDisplayOrder", orElse: 0)) ?? .firstLast self.sortOrder = ContactsSortOrder(rawValue: decoder.decodeInt32ForKey("sortOrder", orElse: 0)) ?? .presence } public func encode(_ encoder: PostboxEncoder) { - encoder.encodeInt32(self.synchronizeDeviceContacts ? 1 : 0, forKey: "synchronizeDeviceContacts") + encoder.encodeInt32(self._legacySynchronizeDeviceContacts ? 1 : 0, forKey: "synchronizeDeviceContacts") encoder.encodeInt32(self.nameDisplayOrder.rawValue, forKey: "nameDisplayOrder") encoder.encodeInt32(self.sortOrder.rawValue, forKey: "sortOrder") } diff --git a/TelegramUI/ContactsController.swift b/TelegramUI/ContactsController.swift index 32fdf4cf7d..e26ffc7b7b 100644 --- a/TelegramUI/ContactsController.swift +++ b/TelegramUI/ContactsController.swift @@ -119,11 +119,14 @@ public class ContactsController: ViewController { }) if #available(iOSApplicationExtension 10.0, *) { - self.authorizationDisposable = (combineLatest(DeviceAccess.authorizationStatus(context: context, subject: .contacts), combineLatest(context.sharedContext.accountManager.noticeEntry(key: ApplicationSpecificNotice.contactsPermissionWarningKey()), context.sharedContext.accountManager.sharedData(keys: [ApplicationSpecificSharedDataKeys.contactSynchronizationSettings])) - |> map { noticeView, sharedData -> (Bool, ContactsSortOrder) in - let settings = sharedData.entries[ApplicationSpecificSharedDataKeys.contactSynchronizationSettings] as? ContactSynchronizationSettings - let synchronizeDeviceContacts: Bool = settings?.synchronizeDeviceContacts ?? true - let sortOrder: ContactsSortOrder = settings?.sortOrder ?? .presence + self.authorizationDisposable = (combineLatest(DeviceAccess.authorizationStatus(context: context, subject: .contacts), combineLatest(context.sharedContext.accountManager.noticeEntry(key: ApplicationSpecificNotice.contactsPermissionWarningKey()), context.account.postbox.preferencesView(keys: [PreferencesKeys.contactsSettings]), context.sharedContext.accountManager.sharedData(keys: [ApplicationSpecificSharedDataKeys.contactSynchronizationSettings])) + |> map { noticeView, preferences, sharedData -> (Bool, ContactsSortOrder) in + let settings: ContactsSettings = preferences.values[PreferencesKeys.contactsSettings] as? ContactsSettings ?? ContactsSettings.defaultSettings + let synchronizeDeviceContacts: Bool = settings.synchronizeContacts + + let contactsSettings = sharedData.entries[ApplicationSpecificSharedDataKeys.contactSynchronizationSettings] as? ContactSynchronizationSettings + + let sortOrder: ContactsSortOrder = contactsSettings?.sortOrder ?? .presence if !synchronizeDeviceContacts { return (true, sortOrder) } diff --git a/TelegramUI/DataPrivacySettingsController.swift b/TelegramUI/DataPrivacySettingsController.swift index 9fbcb5dc71..ee790d06c8 100644 --- a/TelegramUI/DataPrivacySettingsController.swift +++ b/TelegramUI/DataPrivacySettingsController.swift @@ -394,11 +394,13 @@ public func dataPrivacyController(context: AccountContext) -> ViewController { return } - let _ = updateContactSettingsInteractively(accountManager: context.sharedContext.accountManager, { settings in - var settings = settings - settings.synchronizeDeviceContacts = false - return settings - }) + let _ = context.account.postbox.transaction({ transaction in + transaction.updatePreferencesEntry(key: PreferencesKeys.contactsSettings, { current in + var settings = current as? ContactsSettings ?? ContactsSettings.defaultSettings + settings.synchronizeContacts = false + return settings + }) + }).start() actionsDisposable.add(((deleteAllContacts(postbox: context.account.postbox, network: context.account.network) |> then(resetSavedContacts(network: context.account.network))) |> deliverOnMainQueue).start(completed: { @@ -413,10 +415,12 @@ public func dataPrivacyController(context: AccountContext) -> ViewController { }), TextAlertAction(type: .defaultAction, title: presentationData.strings.Common_Cancel, action: {})])) } }, updateSyncContacts: { value in - let _ = updateContactSettingsInteractively(accountManager: context.sharedContext.accountManager, { settings in - var settings = settings - settings.synchronizeDeviceContacts = value - return settings + let _ = context.account.postbox.transaction({ transaction in + transaction.updatePreferencesEntry(key: PreferencesKeys.contactsSettings, { current in + var settings = current as? ContactsSettings ?? ContactsSettings.defaultSettings + settings.synchronizeContacts = value + return settings + }) }).start() }, updateSuggestFrequentContacts: { value in let apply: () -> Void = { @@ -477,11 +481,13 @@ public func dataPrivacyController(context: AccountContext) -> ViewController { actionsDisposable.add(managedUpdatedRecentPeers(accountPeerId: context.account.peerId, postbox: context.account.postbox, network: context.account.network).start()) - let signal = combineLatest(queue: .mainQueue(), context.sharedContext.presentationData, statePromise.get(), context.sharedContext.accountManager.noticeEntry(key: ApplicationSpecificNotice.secretChatLinkPreviewsKey()), context.sharedContext.accountManager.sharedData(keys: [ApplicationSpecificSharedDataKeys.contactSynchronizationSettings]), recentPeers(account: context.account)) - |> map { presentationData, state, noticeView, sharedData, recentPeers -> (ItemListControllerState, (ItemListNodeState, PrivacyAndSecurityEntry.ItemGenerationArguments)) in + let signal = combineLatest(queue: .mainQueue(), context.sharedContext.presentationData, statePromise.get(), context.sharedContext.accountManager.noticeEntry(key: ApplicationSpecificNotice.secretChatLinkPreviewsKey()), context.sharedContext.accountManager.sharedData(keys: [ApplicationSpecificSharedDataKeys.contactSynchronizationSettings]), context.account.postbox.preferencesView(keys: [PreferencesKeys.contactsSettings]), recentPeers(account: context.account)) + |> map { presentationData, state, noticeView, sharedData, preferences, recentPeers -> (ItemListControllerState, (ItemListNodeState, PrivacyAndSecurityEntry.ItemGenerationArguments)) in let secretChatLinkPreviews = noticeView.value.flatMap({ ApplicationSpecificNotice.getSecretChatLinkPreviews($0) }) - let synchronizeDeviceContacts: Bool = (sharedData.entries[ApplicationSpecificSharedDataKeys.contactSynchronizationSettings] as? ContactSynchronizationSettings)?.synchronizeDeviceContacts ?? true + let settings: ContactsSettings = preferences.values[PreferencesKeys.contactsSettings] as? ContactsSettings ?? ContactsSettings.defaultSettings + + let synchronizeDeviceContacts: Bool = settings.synchronizeContacts let suggestRecentPeers: Bool if let updatedSuggestFrequentContacts = state.updatedSuggestFrequentContacts { diff --git a/TelegramUI/OverlayPlayerControllerNode.swift b/TelegramUI/OverlayPlayerControllerNode.swift index c69223eb22..942342da57 100644 --- a/TelegramUI/OverlayPlayerControllerNode.swift +++ b/TelegramUI/OverlayPlayerControllerNode.swift @@ -73,7 +73,7 @@ final class OverlayPlayerControllerNode: ViewControllerTracingNode, UIGestureRec }, openAppStorePage: { }, requestMessageUpdate: { _ in }, cancelInteractiveKeyboardGestures: { - }, automaticMediaDownloadSettings: MediaAutoDownloadSettings.defaultSettings, + }, displayForwardDisabledNotice: { _, _, _ in }, automaticMediaDownloadSettings: MediaAutoDownloadSettings.defaultSettings, pollActionState: ChatInterfacePollActionState()) self.dimNode = ASDisplayNode() diff --git a/TelegramUI/PeerMediaCollectionController.swift b/TelegramUI/PeerMediaCollectionController.swift index 77f6083bb6..5cef24ad5c 100644 --- a/TelegramUI/PeerMediaCollectionController.swift +++ b/TelegramUI/PeerMediaCollectionController.swift @@ -255,7 +255,7 @@ public class PeerMediaCollectionController: TelegramController { }, openAppStorePage: { }, requestMessageUpdate: { _ in }, cancelInteractiveKeyboardGestures: { - }, automaticMediaDownloadSettings: MediaAutoDownloadSettings.defaultSettings, + }, displayForwardDisabledNotice: { _, _, _ in }, automaticMediaDownloadSettings: MediaAutoDownloadSettings.defaultSettings, pollActionState: ChatInterfacePollActionState()) self.controllerInteraction = controllerInteraction diff --git a/TelegramUI/PresentationStrings.swift b/TelegramUI/PresentationStrings.swift index 946278b9d3..fd63b52abb 100644 --- a/TelegramUI/PresentationStrings.swift +++ b/TelegramUI/PresentationStrings.swift @@ -3164,649 +3164,652 @@ public final class PresentationStrings { public var ChatSettings_AutoDownloadReset: String { return self._s[2834]! } public var SocksProxySetup_ShareLink: String { return self._s[2835]! } public var BlockedUsers_SelectUserTitle: String { return self._s[2836]! } - public var GroupInfo_InviteByLink: String { return self._s[2838]! } - public var MessageTimer_Custom: String { return self._s[2839]! } - public var UserInfo_NotificationsDefaultEnabled: String { return self._s[2840]! } - public var Passport_Address_TypeTemporaryRegistration: String { return self._s[2842]! } - public var ChatSettings_AutoDownloadUsingWiFi: String { return self._s[2843]! } - public var Channel_Username_InvalidTaken: String { return self._s[2844]! } - public var Conversation_ClousStorageInfo_Description3: String { return self._s[2845]! } - public var Settings_ChatBackground: String { return self._s[2846]! } - public var Channel_Subscribers_Title: String { return self._s[2847]! } - public var ApplyLanguage_ChangeLanguageTitle: String { return self._s[2848]! } - public var Watch_ConnectionDescription: String { return self._s[2849]! } - public var Wallpaper_ResetWallpapers: String { return self._s[2853]! } - public var EditProfile_Title: String { return self._s[2854]! } - public var NotificationsSound_Bamboo: String { return self._s[2856]! } - public var Channel_AdminLog_MessagePreviousMessage: String { return self._s[2858]! } - public var Login_SmsRequestState2: String { return self._s[2859]! } - public var Passport_Language_ar: String { return self._s[2860]! } - public var Conversation_MessageDialogEdit: String { return self._s[2861]! } + public func Chat_ForwardHiddenAccount(_ _0: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[2838]!, self._r[2838]!, [_0]) + } + public var GroupInfo_InviteByLink: String { return self._s[2839]! } + public var MessageTimer_Custom: String { return self._s[2840]! } + public var UserInfo_NotificationsDefaultEnabled: String { return self._s[2841]! } + public var Passport_Address_TypeTemporaryRegistration: String { return self._s[2843]! } + public var ChatSettings_AutoDownloadUsingWiFi: String { return self._s[2844]! } + public var Channel_Username_InvalidTaken: String { return self._s[2845]! } + public var Conversation_ClousStorageInfo_Description3: String { return self._s[2846]! } + public var Settings_ChatBackground: String { return self._s[2847]! } + public var Channel_Subscribers_Title: String { return self._s[2848]! } + public var ApplyLanguage_ChangeLanguageTitle: String { return self._s[2849]! } + public var Watch_ConnectionDescription: String { return self._s[2850]! } + public var Wallpaper_ResetWallpapers: String { return self._s[2854]! } + public var EditProfile_Title: String { return self._s[2855]! } + public var NotificationsSound_Bamboo: String { return self._s[2857]! } + public var Channel_AdminLog_MessagePreviousMessage: String { return self._s[2859]! } + public var Login_SmsRequestState2: String { return self._s[2860]! } + public var Passport_Language_ar: String { return self._s[2861]! } + public var Conversation_MessageDialogEdit: String { return self._s[2862]! } public func PUSH_AUTH_UNKNOWN(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2862]!, self._r[2862]!, [_1]) + return formatWithArgumentRanges(self._s[2863]!, self._r[2863]!, [_1]) } - public var Common_Close: String { return self._s[2863]! } + public var Common_Close: String { return self._s[2864]! } public func Channel_AdminLog_MessageToggleInvitesOff(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2867]!, self._r[2867]!, [_0]) + return formatWithArgumentRanges(self._s[2868]!, self._r[2868]!, [_0]) } - public var UserInfo_About_Placeholder: String { return self._s[2868]! } + public var UserInfo_About_Placeholder: String { return self._s[2869]! } public func Conversation_FileHowToText(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2869]!, self._r[2869]!, [_0]) + return formatWithArgumentRanges(self._s[2870]!, self._r[2870]!, [_0]) } - public var GroupInfo_Permissions_SectionTitle: String { return self._s[2870]! } - public var Channel_Info_Banned: String { return self._s[2872]! } + public var GroupInfo_Permissions_SectionTitle: String { return self._s[2871]! } + public var Channel_Info_Banned: String { return self._s[2873]! } public func Time_MonthOfYear_m11(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2873]!, self._r[2873]!, [_0]) + return formatWithArgumentRanges(self._s[2874]!, self._r[2874]!, [_0]) } - public var Passport_Language_my: String { return self._s[2874]! } - public var Group_Setup_BasicHistoryHiddenHelp: String { return self._s[2875]! } + public var Passport_Language_my: String { return self._s[2875]! } + public var Group_Setup_BasicHistoryHiddenHelp: String { return self._s[2876]! } public func Time_PreciseDate_m9(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2876]!, self._r[2876]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[2877]!, self._r[2877]!, [_1, _2, _3]) } - public var Preview_CopyAddress: String { return self._s[2877]! } + public var Preview_CopyAddress: String { return self._s[2878]! } public func DialogList_SinglePlayingGameSuffix(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2878]!, self._r[2878]!, [_0]) + return formatWithArgumentRanges(self._s[2879]!, self._r[2879]!, [_0]) } - public var KeyCommand_JumpToPreviousChat: String { return self._s[2879]! } - public var UserInfo_BotSettings: String { return self._s[2880]! } - public var LiveLocation_MenuStopAll: String { return self._s[2882]! } - public var Passport_PasswordCreate: String { return self._s[2883]! } - public var StickerSettings_MaskContextInfo: String { return self._s[2884]! } - public var Message_PinnedLocationMessage: String { return self._s[2885]! } - public var Map_Satellite: String { return self._s[2886]! } - public var Watch_Message_Unsupported: String { return self._s[2887]! } - public var Username_TooManyPublicUsernamesError: String { return self._s[2888]! } - public var TwoStepAuth_EnterPasswordInvalid: String { return self._s[2889]! } + public var KeyCommand_JumpToPreviousChat: String { return self._s[2880]! } + public var UserInfo_BotSettings: String { return self._s[2881]! } + public var LiveLocation_MenuStopAll: String { return self._s[2883]! } + public var Passport_PasswordCreate: String { return self._s[2884]! } + public var StickerSettings_MaskContextInfo: String { return self._s[2885]! } + public var Message_PinnedLocationMessage: String { return self._s[2886]! } + public var Map_Satellite: String { return self._s[2887]! } + public var Watch_Message_Unsupported: String { return self._s[2888]! } + public var Username_TooManyPublicUsernamesError: String { return self._s[2889]! } + public var TwoStepAuth_EnterPasswordInvalid: String { return self._s[2890]! } public func Notification_PinnedTextMessage(_ _0: String, _ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2890]!, self._r[2890]!, [_0, _1]) + return formatWithArgumentRanges(self._s[2891]!, self._r[2891]!, [_0, _1]) } - public var Notifications_ChannelNotificationsHelp: String { return self._s[2891]! } - public var Privacy_Calls_P2PContacts: String { return self._s[2892]! } - public var NotificationsSound_None: String { return self._s[2893]! } - public var AccessDenied_VoiceMicrophone: String { return self._s[2895]! } + public var Notifications_ChannelNotificationsHelp: String { return self._s[2892]! } + public var Privacy_Calls_P2PContacts: String { return self._s[2893]! } + public var NotificationsSound_None: String { return self._s[2894]! } + public var AccessDenied_VoiceMicrophone: String { return self._s[2896]! } public func ApplyLanguage_ChangeLanguageAlreadyActive(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2896]!, self._r[2896]!, [_1]) + return formatWithArgumentRanges(self._s[2897]!, self._r[2897]!, [_1]) } - public var Cache_Indexing: String { return self._s[2897]! } - public var DialogList_RecentTitlePeople: String { return self._s[2899]! } - public var DialogList_EncryptionRejected: String { return self._s[2900]! } - public var GroupInfo_Administrators: String { return self._s[2901]! } - public var Passport_ScanPassportHelp: String { return self._s[2902]! } - public var Application_Name: String { return self._s[2903]! } - public var Channel_AdminLogFilter_ChannelEventsInfo: String { return self._s[2904]! } - public var Passport_Identity_TranslationHelp: String { return self._s[2906]! } + public var Cache_Indexing: String { return self._s[2898]! } + public var DialogList_RecentTitlePeople: String { return self._s[2900]! } + public var DialogList_EncryptionRejected: String { return self._s[2901]! } + public var GroupInfo_Administrators: String { return self._s[2902]! } + public var Passport_ScanPassportHelp: String { return self._s[2903]! } + public var Application_Name: String { return self._s[2904]! } + public var Channel_AdminLogFilter_ChannelEventsInfo: String { return self._s[2905]! } + public var Passport_Identity_TranslationHelp: String { return self._s[2907]! } public func Notification_JoinedGroupByLink(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2907]!, self._r[2907]!, [_0]) - } - public func DialogList_EncryptedChatStartedOutgoing(_ _0: String) -> (String, [(Int, NSRange)]) { return formatWithArgumentRanges(self._s[2908]!, self._r[2908]!, [_0]) } - public var Channel_EditAdmin_PermissionDeleteMessages: String { return self._s[2909]! } - public var Privacy_ChatsTitle: String { return self._s[2910]! } - public var DialogList_ClearHistoryConfirmation: String { return self._s[2911]! } - public var Watch_Suggestion_HoldOn: String { return self._s[2912]! } - public var SocksProxySetup_RequiredCredentials: String { return self._s[2913]! } - public var Passport_Address_TypeRentalAgreementUploadScan: String { return self._s[2914]! } - public var TwoStepAuth_EmailSkipAlert: String { return self._s[2915]! } - public var Channel_Setup_TypePublic: String { return self._s[2918]! } + public func DialogList_EncryptedChatStartedOutgoing(_ _0: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[2909]!, self._r[2909]!, [_0]) + } + public var Channel_EditAdmin_PermissionDeleteMessages: String { return self._s[2910]! } + public var Privacy_ChatsTitle: String { return self._s[2911]! } + public var DialogList_ClearHistoryConfirmation: String { return self._s[2912]! } + public var Watch_Suggestion_HoldOn: String { return self._s[2913]! } + public var SocksProxySetup_RequiredCredentials: String { return self._s[2914]! } + public var Passport_Address_TypeRentalAgreementUploadScan: String { return self._s[2915]! } + public var TwoStepAuth_EmailSkipAlert: String { return self._s[2916]! } + public var Channel_Setup_TypePublic: String { return self._s[2919]! } public func Channel_AdminLog_MessageToggleInvitesOn(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2919]!, self._r[2919]!, [_0]) + return formatWithArgumentRanges(self._s[2920]!, self._r[2920]!, [_0]) } - public var Channel_TypeSetup_Title: String { return self._s[2921]! } - public var Map_OpenInMaps: String { return self._s[2923]! } + public var Channel_TypeSetup_Title: String { return self._s[2922]! } + public var Map_OpenInMaps: String { return self._s[2924]! } public func PUSH_PINNED_NOTEXT(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2924]!, self._r[2924]!, [_1]) + return formatWithArgumentRanges(self._s[2925]!, self._r[2925]!, [_1]) } - public var NotificationsSound_Tremolo: String { return self._s[2926]! } + public var NotificationsSound_Tremolo: String { return self._s[2927]! } public func Date_ChatDateHeaderYear(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2927]!, self._r[2927]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[2928]!, self._r[2928]!, [_1, _2, _3]) } - public var ConversationProfile_UnknownAddMemberError: String { return self._s[2928]! } - public var Passport_PasswordHelp: String { return self._s[2929]! } - public var Login_CodeExpiredError: String { return self._s[2930]! } - public var Channel_EditAdmin_PermissionChangeInfo: String { return self._s[2931]! } - public var Conversation_TitleUnmute: String { return self._s[2932]! } - public var Passport_Identity_ScansHelp: String { return self._s[2933]! } - public var Passport_Language_lo: String { return self._s[2934]! } - public var Camera_FlashAuto: String { return self._s[2935]! } - public var Common_Cancel: String { return self._s[2936]! } - public var DialogList_SavedMessagesTooltip: String { return self._s[2937]! } - public var TwoStepAuth_SetupPasswordTitle: String { return self._s[2938]! } + public var ConversationProfile_UnknownAddMemberError: String { return self._s[2929]! } + public var Passport_PasswordHelp: String { return self._s[2930]! } + public var Login_CodeExpiredError: String { return self._s[2931]! } + public var Channel_EditAdmin_PermissionChangeInfo: String { return self._s[2932]! } + public var Conversation_TitleUnmute: String { return self._s[2933]! } + public var Passport_Identity_ScansHelp: String { return self._s[2934]! } + public var Passport_Language_lo: String { return self._s[2935]! } + public var Camera_FlashAuto: String { return self._s[2936]! } + public var Common_Cancel: String { return self._s[2937]! } + public var DialogList_SavedMessagesTooltip: String { return self._s[2938]! } + public var TwoStepAuth_SetupPasswordTitle: String { return self._s[2939]! } public func PUSH_MESSAGE_FWD(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2939]!, self._r[2939]!, [_1]) + return formatWithArgumentRanges(self._s[2940]!, self._r[2940]!, [_1]) } - public var Conversation_ReportSpamConfirmation: String { return self._s[2940]! } - public var ChatSettings_Title: String { return self._s[2942]! } - public var Passport_PasswordReset: String { return self._s[2943]! } - public var SocksProxySetup_TypeNone: String { return self._s[2944]! } - public var PhoneNumberHelp_Help: String { return self._s[2946]! } - public var Checkout_EnterPassword: String { return self._s[2947]! } - public var Share_AuthTitle: String { return self._s[2949]! } - public var Activity_UploadingDocument: String { return self._s[2950]! } - public var State_Connecting: String { return self._s[2951]! } - public var Profile_MessageLifetime1w: String { return self._s[2952]! } - public var Conversation_ContextMenuReport: String { return self._s[2953]! } - public var CheckoutInfo_ReceiverInfoPhone: String { return self._s[2954]! } - public var AutoNightTheme_ScheduledTo: String { return self._s[2955]! } - public var AuthSessions_Terminate: String { return self._s[2956]! } - public var Checkout_NewCard_CardholderNamePlaceholder: String { return self._s[2957]! } - public var KeyCommand_JumpToPreviousUnreadChat: String { return self._s[2958]! } - public var PhotoEditor_Set: String { return self._s[2959]! } - public var EmptyGroupInfo_Title: String { return self._s[2960]! } - public var Login_PadPhoneHelp: String { return self._s[2961]! } - public var AutoDownloadSettings_TypeGroupChats: String { return self._s[2963]! } - public var PrivacyPolicy_DeclineLastWarning: String { return self._s[2965]! } - public var NotificationsSound_Complete: String { return self._s[2966]! } - public var Group_Info_AdminLog: String { return self._s[2967]! } - public var GroupPermission_NotAvailableInPublicGroups: String { return self._s[2968]! } - public var Channel_AdminLog_InfoPanelAlertText: String { return self._s[2969]! } - public var Conversation_Admin: String { return self._s[2971]! } - public var Conversation_GifTooltip: String { return self._s[2972]! } - public var Passport_NotLoggedInMessage: String { return self._s[2973]! } + public var Conversation_ReportSpamConfirmation: String { return self._s[2941]! } + public var ChatSettings_Title: String { return self._s[2943]! } + public var Passport_PasswordReset: String { return self._s[2944]! } + public var SocksProxySetup_TypeNone: String { return self._s[2945]! } + public var PhoneNumberHelp_Help: String { return self._s[2947]! } + public var Checkout_EnterPassword: String { return self._s[2948]! } + public var Share_AuthTitle: String { return self._s[2950]! } + public var Activity_UploadingDocument: String { return self._s[2951]! } + public var State_Connecting: String { return self._s[2952]! } + public var Profile_MessageLifetime1w: String { return self._s[2953]! } + public var Conversation_ContextMenuReport: String { return self._s[2954]! } + public var CheckoutInfo_ReceiverInfoPhone: String { return self._s[2955]! } + public var AutoNightTheme_ScheduledTo: String { return self._s[2956]! } + public var AuthSessions_Terminate: String { return self._s[2957]! } + public var Checkout_NewCard_CardholderNamePlaceholder: String { return self._s[2958]! } + public var KeyCommand_JumpToPreviousUnreadChat: String { return self._s[2959]! } + public var PhotoEditor_Set: String { return self._s[2960]! } + public var EmptyGroupInfo_Title: String { return self._s[2961]! } + public var Login_PadPhoneHelp: String { return self._s[2962]! } + public var AutoDownloadSettings_TypeGroupChats: String { return self._s[2964]! } + public var PrivacyPolicy_DeclineLastWarning: String { return self._s[2966]! } + public var NotificationsSound_Complete: String { return self._s[2967]! } + public var Group_Info_AdminLog: String { return self._s[2968]! } + public var GroupPermission_NotAvailableInPublicGroups: String { return self._s[2969]! } + public var Channel_AdminLog_InfoPanelAlertText: String { return self._s[2970]! } + public var Conversation_Admin: String { return self._s[2972]! } + public var Conversation_GifTooltip: String { return self._s[2973]! } + public var Passport_NotLoggedInMessage: String { return self._s[2974]! } public func AutoDownloadSettings_OnFor(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2974]!, self._r[2974]!, [_0]) + return formatWithArgumentRanges(self._s[2975]!, self._r[2975]!, [_0]) } - public var Profile_MessageLifetimeForever: String { return self._s[2975]! } - public var SharedMedia_EmptyTitle: String { return self._s[2977]! } - public var Channel_Edit_PrivatePublicLinkAlert: String { return self._s[2979]! } - public var Username_Help: String { return self._s[2980]! } - public var DialogList_LanguageTooltip: String { return self._s[2982]! } - public var Map_LoadError: String { return self._s[2983]! } - public var Login_PhoneNumberAlreadyAuthorized: String { return self._s[2984]! } - public var Channel_AdminLog_AddMembers: String { return self._s[2985]! } - public var Notification_Exceptions_NewException: String { return self._s[2986]! } - public var TwoStepAuth_EmailTitle: String { return self._s[2987]! } - public var WatchRemote_AlertText: String { return self._s[2988]! } - public var ChatSettings_ConnectionType_Title: String { return self._s[2991]! } - public var Passport_Address_CountryPlaceholder: String { return self._s[2992]! } + public var Profile_MessageLifetimeForever: String { return self._s[2976]! } + public var SharedMedia_EmptyTitle: String { return self._s[2978]! } + public var Channel_Edit_PrivatePublicLinkAlert: String { return self._s[2980]! } + public var Username_Help: String { return self._s[2981]! } + public var DialogList_LanguageTooltip: String { return self._s[2983]! } + public var Map_LoadError: String { return self._s[2984]! } + public var Login_PhoneNumberAlreadyAuthorized: String { return self._s[2985]! } + public var Channel_AdminLog_AddMembers: String { return self._s[2986]! } + public var Notification_Exceptions_NewException: String { return self._s[2987]! } + public var TwoStepAuth_EmailTitle: String { return self._s[2988]! } + public var WatchRemote_AlertText: String { return self._s[2989]! } + public var ChatSettings_ConnectionType_Title: String { return self._s[2992]! } + public var Passport_Address_CountryPlaceholder: String { return self._s[2993]! } public func DialogList_AwaitingEncryption(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2993]!, self._r[2993]!, [_0]) + return formatWithArgumentRanges(self._s[2994]!, self._r[2994]!, [_0]) } public func Time_PreciseDate_m6(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2994]!, self._r[2994]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[2995]!, self._r[2995]!, [_1, _2, _3]) } - public var Group_AdminLog_EmptyText: String { return self._s[2995]! } - public var AccessDenied_VideoMicrophone: String { return self._s[2997]! } - public var Conversation_ContextMenuStickerPackAdd: String { return self._s[2998]! } - public var Cache_ClearNone: String { return self._s[2999]! } - public var SocksProxySetup_FailedToConnect: String { return self._s[3000]! } - public var Permissions_NotificationsTitle_v0: String { return self._s[3001]! } + public var Group_AdminLog_EmptyText: String { return self._s[2996]! } + public var AccessDenied_VideoMicrophone: String { return self._s[2998]! } + public var Conversation_ContextMenuStickerPackAdd: String { return self._s[2999]! } + public var Cache_ClearNone: String { return self._s[3000]! } + public var SocksProxySetup_FailedToConnect: String { return self._s[3001]! } + public var Permissions_NotificationsTitle_v0: String { return self._s[3002]! } public func Channel_AdminLog_MessageEdited(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3002]!, self._r[3002]!, [_0]) + return formatWithArgumentRanges(self._s[3003]!, self._r[3003]!, [_0]) } - public var Passport_Identity_Country: String { return self._s[3003]! } + public var Passport_Identity_Country: String { return self._s[3004]! } public func ChatSettings_AutoDownloadSettings_TypeFile(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3004]!, self._r[3004]!, [_0]) - } - public func Notification_CreatedChat(_ _0: String) -> (String, [(Int, NSRange)]) { return formatWithArgumentRanges(self._s[3005]!, self._r[3005]!, [_0]) } - public var AccessDenied_Settings: String { return self._s[3006]! } - public var Passport_Address_TypeUtilityBillUploadScan: String { return self._s[3007]! } - public var Month_ShortMay: String { return self._s[3008]! } - public var Compose_NewGroup: String { return self._s[3009]! } - public var Group_Setup_TypePrivate: String { return self._s[3011]! } - public var Login_PadPhoneHelpTitle: String { return self._s[3013]! } - public var Appearance_ThemeDayClassic: String { return self._s[3014]! } - public var Channel_AdminLog_MessagePreviousCaption: String { return self._s[3015]! } - public var AutoDownloadSettings_OffForAll: String { return self._s[3016]! } - public var Privacy_GroupsAndChannels_WhoCanAddMe: String { return self._s[3017]! } - public var Conversation_typing: String { return self._s[3019]! } - public var Paint_Masks: String { return self._s[3020]! } - public var Username_InvalidTaken: String { return self._s[3021]! } - public var Call_StatusNoAnswer: String { return self._s[3022]! } - public var TwoStepAuth_EmailAddSuccess: String { return self._s[3023]! } - public var Passport_Identity_Selfie: String { return self._s[3024]! } - public var Login_InfoLastNamePlaceholder: String { return self._s[3025]! } - public var Privacy_SecretChatsLinkPreviewsHelp: String { return self._s[3026]! } - public var Conversation_ClearSecretHistory: String { return self._s[3027]! } - public var NetworkUsageSettings_Title: String { return self._s[3029]! } - public var Your_cards_security_code_is_invalid: String { return self._s[3031]! } + public func Notification_CreatedChat(_ _0: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[3006]!, self._r[3006]!, [_0]) + } + public var AccessDenied_Settings: String { return self._s[3007]! } + public var Passport_Address_TypeUtilityBillUploadScan: String { return self._s[3008]! } + public var Month_ShortMay: String { return self._s[3009]! } + public var Compose_NewGroup: String { return self._s[3010]! } + public var Group_Setup_TypePrivate: String { return self._s[3012]! } + public var Login_PadPhoneHelpTitle: String { return self._s[3014]! } + public var Appearance_ThemeDayClassic: String { return self._s[3015]! } + public var Channel_AdminLog_MessagePreviousCaption: String { return self._s[3016]! } + public var AutoDownloadSettings_OffForAll: String { return self._s[3017]! } + public var Privacy_GroupsAndChannels_WhoCanAddMe: String { return self._s[3018]! } + public var Conversation_typing: String { return self._s[3020]! } + public var Paint_Masks: String { return self._s[3021]! } + public var Username_InvalidTaken: String { return self._s[3022]! } + public var Call_StatusNoAnswer: String { return self._s[3023]! } + public var TwoStepAuth_EmailAddSuccess: String { return self._s[3024]! } + public var Passport_Identity_Selfie: String { return self._s[3025]! } + public var Login_InfoLastNamePlaceholder: String { return self._s[3026]! } + public var Privacy_SecretChatsLinkPreviewsHelp: String { return self._s[3027]! } + public var Conversation_ClearSecretHistory: String { return self._s[3028]! } + public var NetworkUsageSettings_Title: String { return self._s[3030]! } + public var Your_cards_security_code_is_invalid: String { return self._s[3032]! } public func Notification_LeftChannel(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3033]!, self._r[3033]!, [_0]) + return formatWithArgumentRanges(self._s[3034]!, self._r[3034]!, [_0]) } public func Call_CallInProgressMessage(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3034]!, self._r[3034]!, [_1, _2]) + return formatWithArgumentRanges(self._s[3035]!, self._r[3035]!, [_1, _2]) } - public var SaveIncomingPhotosSettings_From: String { return self._s[3036]! } - public var Map_LiveLocationTitle: String { return self._s[3037]! } - public var Login_InfoAvatarAdd: String { return self._s[3038]! } - public var Passport_Identity_FilesView: String { return self._s[3039]! } - public var UserInfo_GenericPhoneLabel: String { return self._s[3040]! } - public var Privacy_Calls_NeverAllow: String { return self._s[3041]! } + public var SaveIncomingPhotosSettings_From: String { return self._s[3037]! } + public var Map_LiveLocationTitle: String { return self._s[3038]! } + public var Login_InfoAvatarAdd: String { return self._s[3039]! } + public var Passport_Identity_FilesView: String { return self._s[3040]! } + public var UserInfo_GenericPhoneLabel: String { return self._s[3041]! } + public var Privacy_Calls_NeverAllow: String { return self._s[3042]! } public func Contacts_AddPhoneNumber(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3042]!, self._r[3042]!, [_0]) + return formatWithArgumentRanges(self._s[3043]!, self._r[3043]!, [_0]) } - public var TwoStepAuth_ConfirmationText: String { return self._s[3043]! } - public var ChatSettings_AutomaticVideoMessageDownload: String { return self._s[3044]! } - public var Channel_AdminLogFilter_AdminsAll: String { return self._s[3045]! } - public var Tour_Title2: String { return self._s[3046]! } - public var Conversation_FileOpenIn: String { return self._s[3047]! } - public var Checkout_ErrorPrecheckoutFailed: String { return self._s[3048]! } - public var Wallpaper_Set: String { return self._s[3049]! } - public var Passport_Identity_Translations: String { return self._s[3051]! } + public var TwoStepAuth_ConfirmationText: String { return self._s[3044]! } + public var ChatSettings_AutomaticVideoMessageDownload: String { return self._s[3045]! } + public var Channel_AdminLogFilter_AdminsAll: String { return self._s[3046]! } + public var Tour_Title2: String { return self._s[3047]! } + public var Conversation_FileOpenIn: String { return self._s[3048]! } + public var Checkout_ErrorPrecheckoutFailed: String { return self._s[3049]! } + public var Wallpaper_Set: String { return self._s[3050]! } + public var Passport_Identity_Translations: String { return self._s[3052]! } public func Channel_AdminLog_MessageChangedChannelAbout(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3052]!, self._r[3052]!, [_0]) + return formatWithArgumentRanges(self._s[3053]!, self._r[3053]!, [_0]) } - public var Channel_LeaveChannel: String { return self._s[3053]! } + public var Channel_LeaveChannel: String { return self._s[3054]! } public func PINNED_INVOICE(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3054]!, self._r[3054]!, [_1]) + return formatWithArgumentRanges(self._s[3055]!, self._r[3055]!, [_1]) } - public var PhotoEditor_HighlightsTint: String { return self._s[3055]! } - public var Passport_Email_Delete: String { return self._s[3056]! } - public var Conversation_Mute: String { return self._s[3058]! } - public var Channel_AdminLog_CanSendMessages: String { return self._s[3060]! } + public var PhotoEditor_HighlightsTint: String { return self._s[3056]! } + public var Passport_Email_Delete: String { return self._s[3057]! } + public var Conversation_Mute: String { return self._s[3059]! } + public var Channel_AdminLog_CanSendMessages: String { return self._s[3061]! } public func Notification_PassportValuesSentMessage(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3062]!, self._r[3062]!, [_1, _2]) + return formatWithArgumentRanges(self._s[3063]!, self._r[3063]!, [_1, _2]) } - public var Calls_CallTabDescription: String { return self._s[3063]! } - public var Passport_Identity_NativeNameHelp: String { return self._s[3064]! } - public var Common_No: String { return self._s[3065]! } - public var Weekday_Sunday: String { return self._s[3066]! } - public var Notification_Reply: String { return self._s[3067]! } - public var Conversation_ViewMessage: String { return self._s[3068]! } + public var Calls_CallTabDescription: String { return self._s[3064]! } + public var Passport_Identity_NativeNameHelp: String { return self._s[3065]! } + public var Common_No: String { return self._s[3066]! } + public var Weekday_Sunday: String { return self._s[3067]! } + public var Notification_Reply: String { return self._s[3068]! } + public var Conversation_ViewMessage: String { return self._s[3069]! } public func Checkout_SavePasswordTimeoutAndFaceId(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3069]!, self._r[3069]!, [_0]) - } - public func Map_LiveLocationPrivateDescription(_ _0: String) -> (String, [(Int, NSRange)]) { return formatWithArgumentRanges(self._s[3070]!, self._r[3070]!, [_0]) } - public var Message_PinnedDocumentMessage: String { return self._s[3071]! } - public var DialogList_TabTitle: String { return self._s[3073]! } - public var ChatSettings_AutoPlayTitle: String { return self._s[3074]! } - public var Passport_FieldEmail: String { return self._s[3075]! } - public var Conversation_UnpinMessageAlert: String { return self._s[3076]! } - public var Passport_Address_TypeBankStatement: String { return self._s[3077]! } - public var Passport_Identity_ExpiryDate: String { return self._s[3078]! } - public var Privacy_Calls_P2P: String { return self._s[3079]! } - public func CancelResetAccount_Success(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3081]!, self._r[3081]!, [_0]) + public func Map_LiveLocationPrivateDescription(_ _0: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[3071]!, self._r[3071]!, [_0]) } - public var SocksProxySetup_UseForCallsHelp: String { return self._s[3082]! } - public var EnterPasscode_ChangeTitle: String { return self._s[3083]! } - public var Passport_InfoText: String { return self._s[3084]! } - public var Checkout_NewCard_SaveInfoEnableHelp: String { return self._s[3085]! } + public var Message_PinnedDocumentMessage: String { return self._s[3072]! } + public var DialogList_TabTitle: String { return self._s[3074]! } + public var ChatSettings_AutoPlayTitle: String { return self._s[3075]! } + public var Passport_FieldEmail: String { return self._s[3076]! } + public var Conversation_UnpinMessageAlert: String { return self._s[3077]! } + public var Passport_Address_TypeBankStatement: String { return self._s[3078]! } + public var Passport_Identity_ExpiryDate: String { return self._s[3079]! } + public var Privacy_Calls_P2P: String { return self._s[3080]! } + public func CancelResetAccount_Success(_ _0: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[3082]!, self._r[3082]!, [_0]) + } + public var SocksProxySetup_UseForCallsHelp: String { return self._s[3083]! } + public var EnterPasscode_ChangeTitle: String { return self._s[3084]! } + public var Passport_InfoText: String { return self._s[3085]! } + public var Checkout_NewCard_SaveInfoEnableHelp: String { return self._s[3086]! } public func Login_InvalidPhoneEmailSubject(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3086]!, self._r[3086]!, [_0]) + return formatWithArgumentRanges(self._s[3087]!, self._r[3087]!, [_0]) } public func Time_PreciseDate_m3(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3087]!, self._r[3087]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[3088]!, self._r[3088]!, [_1, _2, _3]) } - public var Passport_Identity_EditDriversLicense: String { return self._s[3088]! } - public var Conversation_TapAndHoldToRecord: String { return self._s[3090]! } + public var Passport_Identity_EditDriversLicense: String { return self._s[3089]! } + public var Conversation_TapAndHoldToRecord: String { return self._s[3091]! } public func Notification_CallTimeFormat(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3091]!, self._r[3091]!, [_1, _2]) + return formatWithArgumentRanges(self._s[3092]!, self._r[3092]!, [_1, _2]) } - public var Channel_EditAdmin_PermissionInviteViaLink: String { return self._s[3093]! } + public var Channel_EditAdmin_PermissionInviteViaLink: String { return self._s[3094]! } public func Generic_OpenHiddenLinkAlert(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3095]!, self._r[3095]!, [_0]) + return formatWithArgumentRanges(self._s[3096]!, self._r[3096]!, [_0]) } - public var DialogList_Unread: String { return self._s[3096]! } + public var DialogList_Unread: String { return self._s[3097]! } public func PUSH_CHAT_MESSAGE_GIF(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3097]!, self._r[3097]!, [_1, _2]) + return formatWithArgumentRanges(self._s[3098]!, self._r[3098]!, [_1, _2]) } - public var User_DeletedAccount: String { return self._s[3098]! } + public var User_DeletedAccount: String { return self._s[3099]! } public func Watch_Time_ShortYesterdayAt(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3099]!, self._r[3099]!, [_0]) + return formatWithArgumentRanges(self._s[3100]!, self._r[3100]!, [_0]) } - public var UserInfo_NotificationsDefault: String { return self._s[3100]! } - public var SharedMedia_CategoryMedia: String { return self._s[3101]! } - public var SocksProxySetup_ProxyStatusUnavailable: String { return self._s[3102]! } - public var Channel_AdminLog_MessageRestrictedForever: String { return self._s[3103]! } - public var Watch_ChatList_Compose: String { return self._s[3104]! } - public var Notifications_MessageNotificationsExceptionsHelp: String { return self._s[3105]! } - public var AutoDownloadSettings_Delimeter: String { return self._s[3106]! } - public var Watch_Microphone_Access: String { return self._s[3107]! } - public var Group_Setup_HistoryHeader: String { return self._s[3108]! } - public var Activity_UploadingPhoto: String { return self._s[3109]! } - public var Conversation_Edit: String { return self._s[3111]! } - public var Group_ErrorSendRestrictedMedia: String { return self._s[3112]! } - public var Login_TermsOfServiceDecline: String { return self._s[3113]! } - public var Message_PinnedContactMessage: String { return self._s[3114]! } + public var UserInfo_NotificationsDefault: String { return self._s[3101]! } + public var SharedMedia_CategoryMedia: String { return self._s[3102]! } + public var SocksProxySetup_ProxyStatusUnavailable: String { return self._s[3103]! } + public var Channel_AdminLog_MessageRestrictedForever: String { return self._s[3104]! } + public var Watch_ChatList_Compose: String { return self._s[3105]! } + public var Notifications_MessageNotificationsExceptionsHelp: String { return self._s[3106]! } + public var AutoDownloadSettings_Delimeter: String { return self._s[3107]! } + public var Watch_Microphone_Access: String { return self._s[3108]! } + public var Group_Setup_HistoryHeader: String { return self._s[3109]! } + public var Activity_UploadingPhoto: String { return self._s[3110]! } + public var Conversation_Edit: String { return self._s[3112]! } + public var Group_ErrorSendRestrictedMedia: String { return self._s[3113]! } + public var Login_TermsOfServiceDecline: String { return self._s[3114]! } + public var Message_PinnedContactMessage: String { return self._s[3115]! } public func Channel_AdminLog_MessageRestrictedNameUsername(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3115]!, self._r[3115]!, [_1, _2]) + return formatWithArgumentRanges(self._s[3116]!, self._r[3116]!, [_1, _2]) } public func Login_PhoneBannedEmailBody(_ _1: String, _ _2: String, _ _3: String, _ _4: String, _ _5: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3116]!, self._r[3116]!, [_1, _2, _3, _4, _5]) + return formatWithArgumentRanges(self._s[3117]!, self._r[3117]!, [_1, _2, _3, _4, _5]) } - public var TwoStepAuth_AdditionalPassword: String { return self._s[3118]! } + public var TwoStepAuth_AdditionalPassword: String { return self._s[3119]! } public func PUSH_CHAT_DELETE_YOU(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3119]!, self._r[3119]!, [_1, _2]) + return formatWithArgumentRanges(self._s[3120]!, self._r[3120]!, [_1, _2]) } - public var Passport_Phone_EnterOtherNumber: String { return self._s[3120]! } - public var Message_PinnedPhotoMessage: String { return self._s[3121]! } - public var Passport_FieldPhone: String { return self._s[3122]! } - public var TwoStepAuth_RecoveryEmailAddDescription: String { return self._s[3123]! } - public var ChatSettings_AutoPlayGifs: String { return self._s[3124]! } - public var InfoPlist_NSCameraUsageDescription: String { return self._s[3126]! } - public var Conversation_Call: String { return self._s[3127]! } - public var Common_TakePhoto: String { return self._s[3129]! } - public var Channel_NotificationLoading: String { return self._s[3130]! } + public var Passport_Phone_EnterOtherNumber: String { return self._s[3121]! } + public var Message_PinnedPhotoMessage: String { return self._s[3122]! } + public var Passport_FieldPhone: String { return self._s[3123]! } + public var TwoStepAuth_RecoveryEmailAddDescription: String { return self._s[3124]! } + public var ChatSettings_AutoPlayGifs: String { return self._s[3125]! } + public var InfoPlist_NSCameraUsageDescription: String { return self._s[3127]! } + public var Conversation_Call: String { return self._s[3128]! } + public var Common_TakePhoto: String { return self._s[3130]! } + public var Channel_NotificationLoading: String { return self._s[3131]! } public func Notification_Exceptions_Sound(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3131]!, self._r[3131]!, [_0]) + return formatWithArgumentRanges(self._s[3132]!, self._r[3132]!, [_0]) } public func PUSH_CHANNEL_MESSAGE_VIDEO(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3132]!, self._r[3132]!, [_1]) + return formatWithArgumentRanges(self._s[3133]!, self._r[3133]!, [_1]) } - public var Permissions_SiriTitle_v0: String { return self._s[3133]! } + public var Permissions_SiriTitle_v0: String { return self._s[3134]! } public func Login_ResetAccountProtected_Text(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3134]!, self._r[3134]!, [_0]) + return formatWithArgumentRanges(self._s[3135]!, self._r[3135]!, [_0]) } - public var Channel_MessagePhotoRemoved: String { return self._s[3135]! } - public var Common_edit: String { return self._s[3136]! } - public var PrivacySettings_AuthSessions: String { return self._s[3137]! } - public var Month_ShortJune: String { return self._s[3138]! } - public var PrivacyLastSeenSettings_AlwaysShareWith_Placeholder: String { return self._s[3139]! } - public var Call_ReportSend: String { return self._s[3140]! } - public var Watch_LastSeen_JustNow: String { return self._s[3141]! } - public var Notifications_MessageNotifications: String { return self._s[3142]! } - public var WallpaperSearch_ColorGreen: String { return self._s[3143]! } - public var BroadcastListInfo_AddRecipient: String { return self._s[3145]! } - public var Group_Status: String { return self._s[3146]! } + public var Channel_MessagePhotoRemoved: String { return self._s[3136]! } + public var Common_edit: String { return self._s[3137]! } + public var PrivacySettings_AuthSessions: String { return self._s[3138]! } + public var Month_ShortJune: String { return self._s[3139]! } + public var PrivacyLastSeenSettings_AlwaysShareWith_Placeholder: String { return self._s[3140]! } + public var Call_ReportSend: String { return self._s[3141]! } + public var Watch_LastSeen_JustNow: String { return self._s[3142]! } + public var Notifications_MessageNotifications: String { return self._s[3143]! } + public var WallpaperSearch_ColorGreen: String { return self._s[3144]! } + public var BroadcastListInfo_AddRecipient: String { return self._s[3146]! } + public var Group_Status: String { return self._s[3147]! } public func AutoNightTheme_LocationHelp(_ _0: String, _ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3147]!, self._r[3147]!, [_0, _1]) + return formatWithArgumentRanges(self._s[3148]!, self._r[3148]!, [_0, _1]) } - public var ShareMenu_ShareTo: String { return self._s[3148]! } - public var Conversation_Moderate_Ban: String { return self._s[3149]! } + public var ShareMenu_ShareTo: String { return self._s[3149]! } + public var Conversation_Moderate_Ban: String { return self._s[3150]! } public func Conversation_DeleteMessagesFor(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3150]!, self._r[3150]!, [_0]) + return formatWithArgumentRanges(self._s[3151]!, self._r[3151]!, [_0]) } - public var SharedMedia_ViewInChat: String { return self._s[3151]! } - public var Map_LiveLocationFor8Hours: String { return self._s[3152]! } + public var SharedMedia_ViewInChat: String { return self._s[3152]! } + public var Map_LiveLocationFor8Hours: String { return self._s[3153]! } public func PUSH_PINNED_PHOTO(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3153]!, self._r[3153]!, [_1]) - } - public func PUSH_PINNED_POLL(_ _1: String) -> (String, [(Int, NSRange)]) { return formatWithArgumentRanges(self._s[3154]!, self._r[3154]!, [_1]) } + public func PUSH_PINNED_POLL(_ _1: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[3155]!, self._r[3155]!, [_1]) + } public func Map_AccurateTo(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3156]!, self._r[3156]!, [_0]) + return formatWithArgumentRanges(self._s[3157]!, self._r[3157]!, [_0]) } - public var Map_OpenInHereMaps: String { return self._s[3157]! } - public var Appearance_ReduceMotion: String { return self._s[3158]! } + public var Map_OpenInHereMaps: String { return self._s[3158]! } + public var Appearance_ReduceMotion: String { return self._s[3159]! } public func PUSH_MESSAGE_TEXT(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3159]!, self._r[3159]!, [_1, _2]) + return formatWithArgumentRanges(self._s[3160]!, self._r[3160]!, [_1, _2]) } - public var Channel_Setup_TypePublicHelp: String { return self._s[3160]! } - public var Passport_Identity_EditInternalPassport: String { return self._s[3161]! } - public var PhotoEditor_Skip: String { return self._s[3162]! } - public func Conversation_LiveLocationMembersCount(_ value: Int32) -> String { + public var Channel_Setup_TypePublicHelp: String { return self._s[3161]! } + public var Passport_Identity_EditInternalPassport: String { return self._s[3162]! } + public var PhotoEditor_Skip: String { return self._s[3163]! } + public func ServiceMessage_GameScoreSimple(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[0 * 6 + Int(form.rawValue)]!, "\(value)") } - public func MessageTimer_ShortHours(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[1 * 6 + Int(form.rawValue)]!, "\(value)") + public func PUSH_CHAT_MESSAGE_VIDEOS(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, selector) + return String(format: self._ps[1 * 6 + Int(form.rawValue)]!, _2, _1, _3) } - public func StickerPack_StickerCount(_ value: Int32) -> String { + public func MessageTimer_Years(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[2 * 6 + Int(form.rawValue)]!, "\(value)") } - public func Notification_GameScoreExtended(_ value: Int32) -> String { + public func Watch_LastSeen_HoursAgo(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[3 * 6 + Int(form.rawValue)]!, "\(value)") } - public func ServiceMessage_GameScoreExtended(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[4 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func Call_ShortSeconds(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[5 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func MessageTimer_Weeks(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[6 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func AttachmentMenu_SendPhoto(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[7 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func SharedMedia_Video(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[8 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func ServiceMessage_GameScoreSelfExtended(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[9 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func LastSeen_HoursAgo(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[10 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func MuteExpires_Hours(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[11 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func LiveLocationUpdated_MinutesAgo(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[12 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func PUSH_MESSAGE_PHOTOS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, selector) - return String(format: self._ps[13 * 6 + Int(form.rawValue)]!, _1, _2) - } - public func InviteText_ContactsCountText(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[14 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func Call_ShortMinutes(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[15 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func Notification_GameScoreSimple(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[16 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func PUSH_CHAT_MESSAGES(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, selector) - return String(format: self._ps[17 * 6 + Int(form.rawValue)]!, _2, _1, _3) - } - public func Media_ShareItem(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[18 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func MessagePoll_VotedCount(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[19 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func PrivacyLastSeenSettings_AddUsers(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[20 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func LiveLocation_MenuChatsCount(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[21 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func SharedMedia_Link(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[22 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func Conversation_StatusMembers(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[23 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func PUSH_MESSAGE_FWDS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, selector) - return String(format: self._ps[24 * 6 + Int(form.rawValue)]!, _1, _2) - } - public func Wallpaper_DeleteConfirmation(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[25 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func Map_ETAMinutes(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[26 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func ForwardedFiles(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[27 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func ChatList_SelectedChats(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[28 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func SharedMedia_DeleteItemsConfirmation(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[29 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func StickerPack_AddStickerCount(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[30 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func ForwardedPolls(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[31 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func PUSH_MESSAGES(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, selector) - return String(format: self._ps[32 * 6 + Int(form.rawValue)]!, _1, _2) - } - public func Call_Seconds(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[33 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func Notification_GameScoreSelfSimple(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[34 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func ForwardedContacts(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[35 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func SharedMedia_File(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[36 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func ServiceMessage_GameScoreSimple(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[37 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func Passport_Scans(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[38 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func MessageTimer_Days(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[39 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func ForwardedAuthorsOthers(_ selector: Int32, _ _0: String, _ _1: String) -> String { - let form = presentationStringsPluralizationForm(self.lc, selector) - return String(format: self._ps[40 * 6 + Int(form.rawValue)]!, _0, _1) - } - public func MuteFor_Hours(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[41 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func AttachmentMenu_SendVideo(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[42 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func Notification_GameScoreSelfExtended(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[43 * 6 + Int(form.rawValue)]!, "\(value)") - } public func PUSH_MESSAGE_VIDEOS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, selector) - return String(format: self._ps[44 * 6 + Int(form.rawValue)]!, _1, _2) - } - public func SharedMedia_Generic(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[45 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func ForwardedVideoMessages(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[46 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func MuteExpires_Minutes(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[47 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func MessageTimer_Seconds(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[48 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func MessageTimer_Months(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[49 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func Watch_LastSeen_MinutesAgo(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[50 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func ServiceMessage_GameScoreSelfSimple(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[51 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func Media_SharePhoto(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[52 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func Map_ETAHours(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[53 * 6 + Int(form.rawValue)]!, "\(value)") + return String(format: self._ps[4 * 6 + Int(form.rawValue)]!, _1, _2) } public func PasscodeSettings_FailedAttempts(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[54 * 6 + Int(form.rawValue)]!, "\(value)") + return String(format: self._ps[5 * 6 + Int(form.rawValue)]!, "\(value)") } - public func MessageTimer_ShortSeconds(_ value: Int32) -> String { + public func ForwardedVideos(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[55 * 6 + Int(form.rawValue)]!, "\(value)") + return String(format: self._ps[6 * 6 + Int(form.rawValue)]!, "\(value)") } - public func ForwardedMessages(_ value: Int32) -> String { + public func MessageTimer_Months(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[56 * 6 + Int(form.rawValue)]!, "\(value)") + return String(format: self._ps[7 * 6 + Int(form.rawValue)]!, "\(value)") } - public func PUSH_CHAT_MESSAGE_PHOTOS(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, selector) - return String(format: self._ps[57 * 6 + Int(form.rawValue)]!, _2, _1, _3) - } - public func Call_Minutes(_ value: Int32) -> String { + public func MuteExpires_Minutes(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[58 * 6 + Int(form.rawValue)]!, "\(value)") + return String(format: self._ps[8 * 6 + Int(form.rawValue)]!, "\(value)") } - public func PUSH_CHANNEL_MESSAGE_FWDS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, selector) - return String(format: self._ps[59 * 6 + Int(form.rawValue)]!, _1, _2) - } - public func AttachmentMenu_SendGif(_ value: Int32) -> String { + public func Notifications_ExceptionMuteExpires_Days(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[60 * 6 + Int(form.rawValue)]!, "\(value)") + return String(format: self._ps[9 * 6 + Int(form.rawValue)]!, "\(value)") } - public func Watch_UserInfo_Mute(_ value: Int32) -> String { + public func MessagePoll_VotedCount(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[61 * 6 + Int(form.rawValue)]!, "\(value)") + return String(format: self._ps[10 * 6 + Int(form.rawValue)]!, "\(value)") } - public func AttachmentMenu_SendItem(_ value: Int32) -> String { + public func InviteText_ContactsCountText(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[62 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func Conversation_StatusSubscribers(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[63 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func ForwardedStickers(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[64 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func Notifications_Exceptions(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[65 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func CreatePoll_AddMoreOptions(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[66 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func SharedMedia_Photo(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[67 * 6 + Int(form.rawValue)]!, "\(value)") + return String(format: self._ps[11 * 6 + Int(form.rawValue)]!, "\(value)") } public func MuteFor_Days(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[68 * 6 + Int(form.rawValue)]!, "\(value)") + return String(format: self._ps[12 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func MuteFor_Hours(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[13 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func PUSH_CHANNEL_MESSAGE_VIDEOS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, selector) + return String(format: self._ps[14 * 6 + Int(form.rawValue)]!, _1, _2) + } + public func PUSH_MESSAGES(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, selector) + return String(format: self._ps[15 * 6 + Int(form.rawValue)]!, _1, _2) } public func ForwardedLocations(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[16 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func StickerPack_RemoveMaskCount(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[17 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func AttachmentMenu_SendPhoto(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[18 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func PUSH_CHAT_MESSAGES(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, selector) + return String(format: self._ps[19 * 6 + Int(form.rawValue)]!, _2, _1, _3) + } + public func Invitation_Members(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[20 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func SharedMedia_Link(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[21 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func DialogList_LiveLocationChatsCount(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[22 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func PrivacyLastSeenSettings_AddUsers(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[23 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func Wallpaper_DeleteConfirmation(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[24 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func LastSeen_MinutesAgo(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[25 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func SharedMedia_Photo(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[26 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func ForwardedStickers(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[27 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func LastSeen_HoursAgo(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[28 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func ServiceMessage_GameScoreSelfSimple(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[29 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func ForwardedAuthorsOthers(_ selector: Int32, _ _0: String, _ _1: String) -> String { + let form = presentationStringsPluralizationForm(self.lc, selector) + return String(format: self._ps[30 * 6 + Int(form.rawValue)]!, _0, _1) + } + public func MessageTimer_ShortSeconds(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[31 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func Conversation_LiveLocationMembersCount(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[32 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func ForwardedMessages(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[33 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func MuteExpires_Days(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[34 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func Media_SharePhoto(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[35 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func PUSH_CHAT_MESSAGE_PHOTOS(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, selector) + return String(format: self._ps[36 * 6 + Int(form.rawValue)]!, _2, _1, _3) + } + public func MessageTimer_Minutes(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[37 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func LiveLocation_MenuChatsCount(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[38 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func MessageTimer_ShortDays(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[39 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func Contacts_ImportersCount(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[40 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func SharedMedia_File(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[41 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func ServiceMessage_GameScoreExtended(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[42 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func PUSH_MESSAGE_FWDS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, selector) + return String(format: self._ps[43 * 6 + Int(form.rawValue)]!, _1, _2) + } + public func PUSH_MESSAGE_ROUNDS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, selector) + return String(format: self._ps[44 * 6 + Int(form.rawValue)]!, _1, _2) + } + public func Notification_GameScoreExtended(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[45 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func PUSH_CHANNEL_MESSAGE_ROUNDS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, selector) + return String(format: self._ps[46 * 6 + Int(form.rawValue)]!, _1, _2) + } + public func MessageTimer_Seconds(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[47 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func UserCount(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[48 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func PUSH_CHANNEL_MESSAGES(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, selector) + return String(format: self._ps[49 * 6 + Int(form.rawValue)]!, _1, _2) + } + public func ServiceMessage_GameScoreSelfExtended(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[50 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func SharedMedia_Generic(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[51 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func Media_ShareItem(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[52 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func StickerPack_RemoveStickerCount(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[53 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func MessageTimer_Days(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[54 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func Map_ETAHours(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[55 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func Call_Seconds(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[56 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func AttachmentMenu_SendGif(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[57 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func Call_ShortSeconds(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[58 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func Passport_Scans(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[59 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func Notifications_Exceptions(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[60 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func MuteExpires_Hours(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[61 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func SharedMedia_Video(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[62 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func ForwardedContacts(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[63 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func Notification_GameScoreSimple(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[64 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func Watch_LastSeen_MinutesAgo(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[65 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func AttachmentMenu_SendItem(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[66 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func ForwardedAudios(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[67 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func Call_ShortMinutes(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[68 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func GroupInfo_ParticipantCount(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[69 * 6 + Int(form.rawValue)]!, "\(value)") } @@ -3814,147 +3817,147 @@ public final class PresentationStrings { let form = presentationStringsPluralizationForm(self.lc, selector) return String(format: self._ps[70 * 6 + Int(form.rawValue)]!, _2, _1, _3) } - public func UserCount(_ value: Int32) -> String { + public func StickerPack_AddStickerCount(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[71 * 6 + Int(form.rawValue)]!, "\(value)") } - public func Media_ShareVideo(_ value: Int32) -> String { + public func Notification_GameScoreSelfSimple(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[72 * 6 + Int(form.rawValue)]!, "\(value)") } - public func DialogList_LiveLocationChatsCount(_ value: Int32) -> String { + public func Notification_GameScoreSelfExtended(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[73 * 6 + Int(form.rawValue)]!, "\(value)") } - public func ForwardedGifs(_ value: Int32) -> String { + public func MessageTimer_ShortWeeks(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[74 * 6 + Int(form.rawValue)]!, "\(value)") } - public func Watch_LastSeen_HoursAgo(_ value: Int32) -> String { + public func MessageTimer_Weeks(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[75 * 6 + Int(form.rawValue)]!, "\(value)") } - public func ChatList_DeleteConfirmation(_ value: Int32) -> String { + public func MessageTimer_ShortMinutes(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[76 * 6 + Int(form.rawValue)]!, "\(value)") } - public func PUSH_CHANNEL_MESSAGE_VIDEOS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { + public func PUSH_CHAT_MESSAGE_FWDS(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, selector) - return String(format: self._ps[77 * 6 + Int(form.rawValue)]!, _1, _2) + return String(format: self._ps[77 * 6 + Int(form.rawValue)]!, _2, _1, _3) } - public func StickerPack_RemoveMaskCount(_ value: Int32) -> String { + public func LiveLocationUpdated_MinutesAgo(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[78 * 6 + Int(form.rawValue)]!, "\(value)") } - public func GroupInfo_ParticipantCount(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[79 * 6 + Int(form.rawValue)]!, "\(value)") + public func PUSH_CHANNEL_MESSAGE_PHOTOS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, selector) + return String(format: self._ps[79 * 6 + Int(form.rawValue)]!, _1, _2) } - public func Contacts_ImportersCount(_ value: Int32) -> String { + public func ForwardedVideoMessages(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[80 * 6 + Int(form.rawValue)]!, "\(value)") } - public func ForwardedVideos(_ value: Int32) -> String { + public func ForwardedPolls(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[81 * 6 + Int(form.rawValue)]!, "\(value)") } - public func PUSH_MESSAGE_ROUNDS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, selector) - return String(format: self._ps[82 * 6 + Int(form.rawValue)]!, _1, _2) + public func AttachmentMenu_SendVideo(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[82 * 6 + Int(form.rawValue)]!, "\(value)") } - public func StickerPack_AddMaskCount(_ value: Int32) -> String { + public func Forward_ConfirmMultipleFiles(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[83 * 6 + Int(form.rawValue)]!, "\(value)") } - public func PUSH_CHAT_MESSAGE_FWDS(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, selector) - return String(format: self._ps[84 * 6 + Int(form.rawValue)]!, _2, _1, _3) - } - public func MessageTimer_ShortDays(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[85 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func MessageTimer_Minutes(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[86 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func MessageTimer_ShortMinutes(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[87 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func StickerPack_RemoveStickerCount(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[88 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func Invitation_Members(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[89 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func Notifications_ExceptionMuteExpires_Minutes(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[90 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func Notifications_ExceptionMuteExpires_Days(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[91 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func PUSH_CHANNEL_MESSAGE_ROUNDS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, selector) - return String(format: self._ps[92 * 6 + Int(form.rawValue)]!, _1, _2) - } - public func PUSH_CHANNEL_MESSAGE_PHOTOS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, selector) - return String(format: self._ps[93 * 6 + Int(form.rawValue)]!, _1, _2) - } - public func PUSH_CHANNEL_MESSAGES(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, selector) - return String(format: self._ps[94 * 6 + Int(form.rawValue)]!, _1, _2) - } - public func Notifications_ExceptionMuteExpires_Hours(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[95 * 6 + Int(form.rawValue)]!, "\(value)") - } public func Conversation_StatusOnline(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[96 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func QuickSend_Photos(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[97 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func MessageTimer_Hours(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[98 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func MessageTimer_ShortWeeks(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[99 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func ForwardedAudios(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[100 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func MuteExpires_Days(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[101 * 6 + Int(form.rawValue)]!, "\(value)") + return String(format: self._ps[84 * 6 + Int(form.rawValue)]!, "\(value)") } public func ForwardedPhotos(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[102 * 6 + Int(form.rawValue)]!, "\(value)") + return String(format: self._ps[85 * 6 + Int(form.rawValue)]!, "\(value)") } - public func PUSH_CHAT_MESSAGE_VIDEOS(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String { + public func StickerPack_AddMaskCount(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[86 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func Watch_UserInfo_Mute(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[87 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func StickerPack_StickerCount(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[88 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func ChatList_DeleteConfirmation(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[89 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func ChatList_SelectedChats(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[90 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func MessageTimer_Hours(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[91 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func Notifications_ExceptionMuteExpires_Hours(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[92 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func Conversation_StatusSubscribers(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[93 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func Call_Minutes(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[94 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func Notifications_ExceptionMuteExpires_Minutes(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[95 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func QuickSend_Photos(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[96 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func MessageTimer_ShortHours(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[97 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func Conversation_StatusMembers(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[98 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func SharedMedia_DeleteItemsConfirmation(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[99 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func CreatePoll_AddMoreOptions(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[100 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func ForwardedGifs(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[101 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func PUSH_CHANNEL_MESSAGE_FWDS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, selector) - return String(format: self._ps[103 * 6 + Int(form.rawValue)]!, _2, _1, _3) + return String(format: self._ps[102 * 6 + Int(form.rawValue)]!, _1, _2) } - public func LastSeen_MinutesAgo(_ value: Int32) -> String { + public func Media_ShareVideo(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[103 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func ForwardedFiles(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[104 * 6 + Int(form.rawValue)]!, "\(value)") } - public func MessageTimer_Years(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[105 * 6 + Int(form.rawValue)]!, "\(value)") + public func PUSH_MESSAGE_PHOTOS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, selector) + return String(format: self._ps[105 * 6 + Int(form.rawValue)]!, _1, _2) } - public func Forward_ConfirmMultipleFiles(_ value: Int32) -> String { + public func Map_ETAMinutes(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[106 * 6 + Int(form.rawValue)]!, "\(value)") } diff --git a/TelegramUI/Resources/PresentationStrings.mapping b/TelegramUI/Resources/PresentationStrings.mapping index ce0d1833672ddd2c949f7bc40f0c81033c6307b1..97c58752e18d4ea7939eab448fb59dc32513c2a2 100644 GIT binary patch delta 4975 zcmZWs33Qa#b)Gx$Yn#!AG}35B%V0smG@2RBA|W=3 zeMf@laHyI2i{9c6eXLUxjKyR1UsKLZg0C@plB&;(H zQ8E?sz&2V!Mf_*msDvE+<~Ay$V*YR&&7%^wdZ>abxYk2ug_W?(gog&77Htm)do;i5 z?9ifqRl2R>{a8bDc|nXS`E3uGjPpz)^A&sILaCl_5|`c9L{C_LI5{*x*<8JyEDu!2 zowj$no4Q?{9ZlVxt&g;}b+yX#Er8OD-@4$yKrrB}^9LjPW{Wx0OSxiVOB!F?PHD7+ zpWRO7^Z@??Kgv>Am2i6+0Lk@I1})>+UMe&$H;GVxUSf@O{E!|Fk9jG99_FK7nr~cT z62W`c@?}!J5+1Vf+a6YjG+6i9l+o)Nes z16#X7A;0GJL^Xil>KV{O-Yl_SWPH>lZvEEEuk=zDeMLrCWqiyePQOu}+7^rU29afCd&Ne>KM^5ta^LiQG~z0 zgNlt&>_5Z7cXuGSVw}`ZrOFUY?c$R%OS;?Z2}Gt0hV?Wn^#`T(POOoj)&a<{$Jyxj zMEYE@sID8~@qV%@yRf8)FU=!+Mn^E{k81k1yCE$UH^uXk)wzBEokTnf9xllaun7!L62Ed>x16d zfEtL(FpqKd0NIVlO``k7g2b9(DLWwxw#s62J}=or8{umwV8b#`Y}#J zkRvAg^7MN-!{z{(Wt>+BaJ>^e7$6&+Gfa*m$~P=WDrlQ?_Z&hH0kmU14(4srFS zl`TO^R~Vo6$-Alz;s{^m<{%X+UxRp#7~GxB2ZK24*ZFb~&M)va`Sk?5MkqUdjn?!3 z;CqrYLsX$$grQA%Qmo=$x1z`txx`yTRHghW6glSt*?cJkI{YR-9U`agDF|i7c1F~2 z02k(*y3)Vk{|ZsL?OSoZtmx*T$JY=J2X$`yHrEV-8=mIwL2UXREGy&Ce30!^gOs5> zBllvLhI+m_NXg1~@onMSC1f$HJ9YS=!S%7w#-{GWLCFp}?IxN8^~-QeBB zILA%CJPfSg;kSl?*t`7EFtYZR++J=cYVAt$M)VX3#CyDGC;05&Ok$faTeSOA^s@PP z-n$c|^h>_9lPc*~@*b>wYbUDZePGj@Bfean$oV6bYW)v*#h;-g7z{>CIeF3aOrdnqMR$L%ANDEjkUapjJM?~ULvA9M09Dze{(!!$T) zU)$Q+P~W|_bz|Gwx&~P;cerjB&i4sxyU1bu)Ff(toW)P>0!05U6=QRgxOq1vZTKBTG9BW*y;UcW-^X|FQq_K+XT<4_ z1@MDahW~{|wvg6fRO^}QNgLFVU)O#CtyN@(viYUmWKzDwXSo>sw1_|0jXb)?cXy-1 z8_Zm>2ap=Mbq~sC1`q6^^5U5oFl6FPvwowd`h5)p9?dWJRm?m%Kw13e9^8Kd)|Q|j zS;g%Osd_FaLXs~pmS3x)6kU`AQKsz63DQ2rEMDK6$J$ z-;yM*+)XiKVpWGGORty*$Ea8-fx!a)`b;Y4m&a(9u@u0d&_5i*1(osVW60QY&fkw| zsDfSlF$l~y%M44F)20Lx1Ll6P^&Ggdi|Z}9=6coZ*Crd$T>ja9sx;0si)vFL_D@Tl z;%$k~d|rG2iCfKE4p3F`0yxNqR3A9&np_>-^$pDp9Sz-^+dAdy8vf=1Ah^&hu3ydO zUml>0vPCfY;}n^0gNvcAWKTLK(p#kpFFuH7wgj>~9^6CLWOO6F;FhxgAhPg5{aF0$ zK}srEj#Y8ul=E$er(cEF$&uh8{`o<4kcY9PK<^+XH`v)HLtJ5IdJK0}dkA&AlGh#r z`_%HlA)1Ss^lOK3yDq+R2-&cj|M3tKzK-u5Lcgzvt3{&iLpv`!Ohx$(_)Ld4oiR~K zn0VZ3KyMq396gLVVGW-@jEI}e;`Rr4RUF1{>-g7)sVeUg*y7Ki(|nw6@o8x0c}J+C zumw7q(e6G^SZz@QF{l2&$swVYLr190*fv>M;*uwkpF4tP($23P!KUl^J*by&h`Z3Q zDNaW1O>G@*5&$=p61V%5ZOzS6*U7aC$<%_! zgr`^S&@c@;TQI@*MUwbc=_J{}x0a#aCj=;`-ZK(O;bSLo78C#WIF&jPzK(rMEULn{ zQ?8JsivGZe%k;1$joU@$6{}1XrN%9Tk&ATHS{mGL*O~^mgi-S9bd=4($$>wT$xUZb zl(X1@pi=a_lyT1jTVxyY2zlZhV7BllCorhzKv68V{Jkw*AMN!yLZao6>6VOPMAl=( z%JnCyv{ycBrKf2STeJY;mN42No=zNJi|W%nPJL&4TrnM{JF0p6;WIz3n07XGBL!S@ zhN|$q{pb|1E8=I*pdCB7<`~|!#r)GVWL;PSTX}woWW&yohWDM0X6ck%-(OE%J%}=y z7lojy<>$x_n!0)d_*8QKIczYSPoD*IR!Kavk{j_ho&zrqzHo}{DGfWLs4Uet*C5j{ zxv{I>JrCL};aOyv;hqoa?5vzM7&F~o@aEKNCzj~-bASh4x3_NLI~#V9B8+(kv4#kAvqZ(b!^O2cZMV`)Oir3glWQQyeAdBNIPP`)Q%dbVWCda@SBP8>T< z$iCRgPq|$vkhX_5v^|h=N}*5)ozs~zZ6Ik++tU^ZonbodP)IWEDP)Fb=KG(N9H@_c ztoPsLzsq-*=Y3D7{_b2VS!d{bM5BFFD9+dC^SAmalZyEHJ}NOh$r&3zN>-wpN+&t7z4qF|Rn?Y>U zMn<%dyD_Lmb-`u)L_aN~<@}3&s-zWsL;hLGrCwS>cXNlAN(`$^B0OwMTS^eW$0W{r ztZ5??@}hhB+h8-?XJTcFtf{Lc!)m?(8Ct_uA1yJi)k85HB1cA}Ux`Vfb*%Yd-Flw& zQ8_j8b3VkQiGSszT54ueX<=~-q_V);p@iKYC8h?0ftYS=D>teL+XnWlRA+1hn~SeC zkt3@uG^PXtKB<2rVzki4@2Hex*klr~c`V}SGnR}EYA`Ix?d%$$3S$Rki+FS$6>{GI zrBfIC2dJ95d2WD~+j~IG26Ln0^{ei-kWU>Cga)O!hp&Lo*b4@ynEO!yy9OzTHgo+T zoY}&?gD`I^PYjZsw#mpAiJR-w__;wUFg#!q@BYmyKKX))KNzHR!-LY$e9rV!0X@Vn zKiz5E0kyT_>>W;y`N=|`f0%nR_GZh!)f&QRAIMRAvl=Si^75L-{;DL^c}b7lz11 z5&q2(Eigo3%N;Iu3{x(}c*!ur73ZE|sxpk}kh(9SYZsK{LT95gqDB;VOHhgW8{#qj zo^jA5EN($q33=6^G+=@+4g)>A`Qu@#aqdZ~=-%wv(AUxI@ieqH_qA+ol8#RDnjk_s z#UnukcAAd|VcI^ExOAm3t9K%-c4{FVX#4qc5FkCk*TLX82#qV`S~-ass< zGah312vs@{C-3yc09SXT77D4}SQ0WvI6MMW9F^s0;p}Z>GTpC+wTNB~$N1F|sxcmi ze6etURGjYX)qOp|IU!m=CwXazR?sOP43XP0o3x|buf?=xUm&JM+#XfeGsovcF!(fI z4w2I!OycxaJDW6`PoL)!jTRXng{)mqT^8aO4yuWYVjk5{u3z9ejaC@GXc7&>MWXL` z4u7Cgn(NCDnh(d}(3l#DDzN}sM}u!9prhMM%_zw}3|MQ$3rKR+JUKgce;|pLb z}-6V)fLc!}SRBIz&l2jgVb zXMCi$kzuV&nJ~|Y=%f7}JV`Mk} z6Bvp(Zys4hmowEUZ~ifx<7l4$%yn^8`@h^OZhbiLWSmTfpP&Jz+2?l+3?LB=LA_dD zhoVYWR*fZvw!2Sj-y%qJ5)HtnuCsXbzCo?_hhD4 z82$qR8!VJfJ6p$jG#Ru%aMuJC8vZi@`P~zM{2%$~1l1P*37TYA+NuPDVI{2IF3I=# z;sn(g{%jJZPZfy^*9tNl`n7mWqT>U0??$zL$ep{!+)E^(wFix zJK~7~{i`&nh~L`{0R9bERf(J&C)@S_{2y`c9z^S7?%YF*3U7cYOD5SJJM}j5KRmk! zH~cT3+k^J~30SNmFKpo}d$7;^9gme_^e?5HJxN(~lO2;7`u`_qZ~^yCQho(tV~~Mv z3MfHsusslsxqFrV+s)4aa&cn&d0J|?gI}1$zA(?s4gDyZ_a`ygj7)o>HI?i3Vs55E zB2TOnmQ-j>$uNu8_S*Q=UKo=JO0w9_@1=Y)@sIbSfXw_~d$A8?fm+UQrUKXSPOERi8y|oO6h3Y#X5spG0SO%V`|f{oBMn zhu}gxj~_zHJHTQSx$|rp>l6D@X9BU}NhOUhv{I%~n%~9m9m0j(oO&2Q?BPX+$#K{H z5S9ChzFc&-b#^v4^>uf(w@ZOu(DW9L^{K(@jYqHx^lFl_nWqk8-`K*B9mWQ?)htH0 zQ+@9j;0CC zQdsQ)m%dY^!<;<)>WdDB0>JLx67Z>-Y%CSra}rhY;3+awCZ9bHRVEHejb@%a4P0jN zrALscY(9UK%Iz|#QkMi%a-Ic3Xll{i6mh*KpJ8EUW_LV2O}_ASYf!mG!>H8*U;)J?y56^EU;u26A}$5|%M(;)lOi%%pLVA`5E?Gx zn*w{E6`|UeZ^UZov2p!zD&JHL=35zT?rrEu7;I0TVubEeB8X>8AgD$iIF%R3_Zq!3 zdek5q5p2Ri)XA<#u#%SW>>QO9mHwj!=|R-R3yzV+wg5z=IvFU{tA%{gGCaHZojG!* zdGr{S^OK0QvjXS;=#jLh66Ym)ew+#ZDjY~px|L{D?wW4-Y7njF3#Z7sd?5(Z^xF=} zl~#*HyJCI>uLczT?F-2QhkJt-k3?%FP&nrdWuO`Tb`I@lvCOt*T5kiMC6JLx`gEjQ z)sPwqc-=Vu%w;;Dl9`OwB?aZUYaR~=B5Kr~47*&eWNMSFy#c%tVBOW@v-Fl2uRMw! z_fCF$mR!bVI4#qoU_vqm5|LQWGbgC1U>RWlVMcQkvzrSm9XOpKDEV5*!X?lrlz=On1qNMdK>1k-=E5~SI;YN^T z%5STcb72!de*}G{oiClio`eE80O))Y*M``>>{#e$kN*kkwR`bjh#?>xP@Olftj;a=EQ|}=r5f@XW7o*IYu_) z17NM?Izd(Zs-QH(gDL#(D!fyz6G`ERq>*K`L${S*IZdf}hb}#Z|DyDz2!(adV!TMN zK0_{>0&OxTJ#i#Kwm`Su1Ec-2KibGE+p2Aa-X`T*`5D(5;=VxQA1HcMKLuXt!vKHo r43@<~Jtbv{koloPR!F-Njd?J%ZlSzkPz&e{nV&sEMjB$<87lvO%S#3D diff --git a/TelegramUI/UpgradedAccounts.swift b/TelegramUI/UpgradedAccounts.swift index 309bf44944..557554f967 100644 --- a/TelegramUI/UpgradedAccounts.swift +++ b/TelegramUI/UpgradedAccounts.swift @@ -241,6 +241,37 @@ public func upgradedAccounts(accountManager: AccountManager, rootPath: String) - signal = signal |> then(upgradeAccessChallengeData) } } + if version < 4 { + let updatedContactSynchronizationSettings = accountManager.transaction { transaction -> (ContactSynchronizationSettings, [AccountRecordId]) in + return (transaction.getSharedData(ApplicationSpecificSharedDataKeys.contactSynchronizationSettings) as? ContactSynchronizationSettings ?? ContactSynchronizationSettings.defaultSettings, transaction.getRecords().map({ $0.id })) + } + |> mapToSignal { globalSettings, ids -> Signal in + var importSignal: Signal = .complete() + for id in ids { + let importInfoAccounttSignal = accountTransaction(rootPath: rootPath, id: id, transaction: { transaction -> Void in + transaction.updatePreferencesEntry(key: PreferencesKeys.contactsSettings, { current in + var settings = current as? ContactsSettings ?? ContactsSettings.defaultSettings + settings.synchronizeContacts = globalSettings._legacySynchronizeDeviceContacts + return settings + }) + }) + |> ignoreValues + importSignal = importSignal |> then(importInfoAccounttSignal) + } + return importSignal + } + + let applyVersion = accountManager.transaction { transaction -> Void in + transaction.setVersion(4) + } + |> ignoreValues + signal = signal |> then( + updatedContactSynchronizationSettings + |> then( + applyVersion + ) + ) + } return signal } }