From 08040c159815be5671b278bc31d1f3ce128bedc8 Mon Sep 17 00:00:00 2001 From: Ali <> Date: Fri, 30 Oct 2020 20:58:02 +0400 Subject: [PATCH] Experimental widget settings --- .../Telegram-iOS/en.lproj/Localizable.strings | 2 + .../Sources/ItemListPeerItem.swift | 40 +- .../MergeLists/Sources/MergeLists.swift | 2 +- submodules/SettingsUI/BUILD | 1 + .../DataAndStorageSettingsController.swift | 42 +- .../Sources/PresentationStrings.swift | 2051 +++++++++-------- .../Resources/PresentationStrings.mapping | Bin 159274 -> 159313 bytes .../Sources/DeclareEncodables.swift | 1 + .../Sources/WidgetDataContext.swift | 67 +- .../Sources/PostboxKeys.swift | 2 + .../Sources/WidgetSettings.swift | 61 + submodules/WidgetSetupScreen/BUILD | 25 + .../Sources/WidgetSetupScreen.swift | 453 ++++ 13 files changed, 1691 insertions(+), 1056 deletions(-) create mode 100644 submodules/TelegramUIPreferences/Sources/WidgetSettings.swift create mode 100644 submodules/WidgetSetupScreen/BUILD create mode 100644 submodules/WidgetSetupScreen/Sources/WidgetSetupScreen.swift diff --git a/Telegram/Telegram-iOS/en.lproj/Localizable.strings b/Telegram/Telegram-iOS/en.lproj/Localizable.strings index b5bd7397f9..1278d0ffa8 100644 --- a/Telegram/Telegram-iOS/en.lproj/Localizable.strings +++ b/Telegram/Telegram-iOS/en.lproj/Localizable.strings @@ -5888,3 +5888,5 @@ Sorry for the inconvenience."; "Stats.Message.Views" = "Views"; "Stats.Message.PublicShares" = "Public Shares"; "Stats.Message.PrivateShares" = "Private Shares"; + +"ChatSettings.WidgetSettings" = "Widget"; diff --git a/submodules/ItemListPeerItem/Sources/ItemListPeerItem.swift b/submodules/ItemListPeerItem/Sources/ItemListPeerItem.swift index 5df854a406..69fea1777c 100644 --- a/submodules/ItemListPeerItem/Sources/ItemListPeerItem.swift +++ b/submodules/ItemListPeerItem/Sources/ItemListPeerItem.swift @@ -208,11 +208,13 @@ private final class LoadingShimmerNode: ASDisplayNode { public struct ItemListPeerItemEditing: Equatable { public var editable: Bool public var editing: Bool + public var canBeReordered: Bool public var revealed: Bool? - public init(editable: Bool, editing: Bool, revealed: Bool?) { + public init(editable: Bool, editing: Bool, canBeReordered: Bool = false, revealed: Bool?) { self.editable = editable self.editing = editing + self.canBeReordered = canBeReordered self.revealed = revealed } } @@ -460,6 +462,7 @@ public class ItemListPeerItemNode: ItemListRevealOptionsItemNode, ItemListItemNo private var layoutParams: (ItemListPeerItem, ListViewItemLayoutParams, ItemListNeighbors, Bool)? private var editableControlNode: ItemListEditableControlNode? + private var reorderControlNode: ItemListEditableReorderControlNode? override public var canBeSelected: Bool { if self.editableControlNode != nil || self.disabledOverlayNode != nil { @@ -560,6 +563,7 @@ public class ItemListPeerItemNode: ItemListRevealOptionsItemNode, ItemListItemNo let makeStatusLayout = TextNode.asyncLayout(self.statusNode) let makeLabelLayout = TextNode.asyncLayout(self.labelNode) let editableControlLayout = ItemListEditableControlNode.asyncLayout(self.editableControlNode) + let reorderControlLayout = ItemListEditableReorderControlNode.asyncLayout(self.reorderControlNode) var currentDisabledOverlayNode = self.disabledOverlayNode @@ -761,12 +765,20 @@ public class ItemListPeerItemNode: ItemListRevealOptionsItemNode, ItemListItemNo } var editableControlSizeAndApply: (CGFloat, (CGFloat) -> ItemListEditableControlNode)? + var reorderControlSizeAndApply: (CGFloat, (CGFloat, Bool, ContainedViewLayoutTransition) -> ItemListEditableReorderControlNode)? let editingOffset: CGFloat + var reorderInset: CGFloat = 0.0 if item.editing.editing { let sizeAndApply = editableControlLayout(item.presentationData.theme, false) editableControlSizeAndApply = sizeAndApply editingOffset = sizeAndApply.0 + + if item.editing.canBeReordered { + let reorderSizeAndApply = reorderControlLayout(item.presentationData.theme) + reorderControlSizeAndApply = reorderSizeAndApply + reorderInset = reorderSizeAndApply.0 + } } else { editingOffset = 0.0 } @@ -804,6 +816,8 @@ public class ItemListPeerItemNode: ItemListRevealOptionsItemNode, ItemListItemNo labelInset += 15.0 } + labelInset += reorderInset + let (labelLayout, labelApply) = makeLabelLayout(TextNodeLayoutArguments(attributedString: labelAttributedString, backgroundColor: nil, maximumNumberOfLines: 1, truncationType: .end, constrainedSize: CGSize(width: params.width - leftInset - 16.0 - editingOffset - rightInset, height: CGFloat.greatestFiniteMagnitude), alignment: .natural, cutout: nil, insets: UIEdgeInsets())) let (titleLayout, titleApply) = makeTitleLayout(TextNodeLayoutArguments(attributedString: titleAttributedString, backgroundColor: nil, maximumNumberOfLines: 1, truncationType: .end, constrainedSize: CGSize(width: params.width - leftInset - 12.0 - editingOffset - rightInset - labelLayout.size.width - labelInset, height: CGFloat.greatestFiniteMagnitude), alignment: .natural, cutout: nil, insets: UIEdgeInsets())) @@ -931,6 +945,23 @@ public class ItemListPeerItemNode: ItemListRevealOptionsItemNode, ItemListItemNo }) } + if let reorderControlSizeAndApply = reorderControlSizeAndApply { + if strongSelf.reorderControlNode == nil { + let reorderControlNode = reorderControlSizeAndApply.1(layout.contentSize.height, false, .immediate) + strongSelf.reorderControlNode = reorderControlNode + strongSelf.addSubnode(reorderControlNode) + reorderControlNode.alpha = 0.0 + transition.updateAlpha(node: reorderControlNode, alpha: 1.0) + } + let reorderControlFrame = CGRect(origin: CGPoint(x: params.width + revealOffset - params.rightInset - reorderControlSizeAndApply.0, y: 0.0), size: CGSize(width: reorderControlSizeAndApply.0, height: layout.contentSize.height)) + strongSelf.reorderControlNode?.frame = reorderControlFrame + } else if let reorderControlNode = strongSelf.reorderControlNode { + strongSelf.reorderControlNode = nil + transition.updateAlpha(node: reorderControlNode, alpha: 0.0, completion: { [weak reorderControlNode] _ in + reorderControlNode?.removeFromSupernode() + }) + } + let _ = titleApply() let _ = statusApply() let _ = labelApply() @@ -1293,6 +1324,13 @@ public class ItemListPeerItemNode: ItemListRevealOptionsItemNode, ItemListItemNo shimmerNode.updateAbsoluteRect(rect, within: containerSize) } } + + override public func isReorderable(at point: CGPoint) -> Bool { + if let reorderControlNode = self.reorderControlNode, reorderControlNode.frame.contains(point), !self.isDisplayingRevealedOptions { + return true + } + return false + } } public final class ItemListPeerItemHeader: ListViewItemHeader { diff --git a/submodules/MergeLists/Sources/MergeLists.swift b/submodules/MergeLists/Sources/MergeLists.swift index 4a12a6da54..6dad3c27c4 100644 --- a/submodules/MergeLists/Sources/MergeLists.swift +++ b/submodules/MergeLists/Sources/MergeLists.swift @@ -226,7 +226,7 @@ public func mergeListsStableWithUpdates(leftList: [T], rightList: [T], isLess } var i = 0 while i < rightList.count { - if updatedItems[i].1 != getId(rightList[i]) { + if updatedItems.count <= i || updatedItems[i].1 != getId(rightList[i]) { updatedItems.insert((rightList[i], getId(rightList[i])), at: i) var previousIndex: Int? for k in 0 ..< leftList.count { diff --git a/submodules/SettingsUI/BUILD b/submodules/SettingsUI/BUILD index 51c58151f8..417e3b44b0 100644 --- a/submodules/SettingsUI/BUILD +++ b/submodules/SettingsUI/BUILD @@ -86,6 +86,7 @@ swift_library( "//submodules/OpenInExternalAppUI:OpenInExternalAppUI", "//submodules/AccountUtils:AccountUtils", "//submodules/AuthTransferUI:AuthTransferUI", + "//submodules/WidgetSetupScreen:WidgetSetupScreen", ], visibility = [ "//visibility:public", diff --git a/submodules/SettingsUI/Sources/Data and Storage/DataAndStorageSettingsController.swift b/submodules/SettingsUI/Sources/Data and Storage/DataAndStorageSettingsController.swift index 46663804b4..1e886d0e80 100644 --- a/submodules/SettingsUI/Sources/Data and Storage/DataAndStorageSettingsController.swift +++ b/submodules/SettingsUI/Sources/Data and Storage/DataAndStorageSettingsController.swift @@ -12,6 +12,7 @@ import ItemListUI import PresentationDataUtils import AccountContext import OpenInExternalAppUI +import WidgetSetupScreen private final class DataAndStorageControllerArguments { let openStorageUsage: () -> Void @@ -27,9 +28,10 @@ private final class DataAndStorageControllerArguments { let toggleDownloadInBackground: (Bool) -> Void let openBrowserSelection: () -> Void let openIntents: () -> Void + let openWidgetSettings: () -> Void let toggleEnableSensitiveContent: (Bool) -> Void - init(openStorageUsage: @escaping () -> Void, openNetworkUsage: @escaping () -> Void, openProxy: @escaping () -> Void, openAutomaticDownloadConnectionType: @escaping (AutomaticDownloadConnectionType) -> Void, resetAutomaticDownload: @escaping () -> Void, openVoiceUseLessData: @escaping () -> Void, openSaveIncomingPhotos: @escaping () -> Void, toggleSaveEditedPhotos: @escaping (Bool) -> Void, toggleAutoplayGifs: @escaping (Bool) -> Void, toggleAutoplayVideos: @escaping (Bool) -> Void, toggleDownloadInBackground: @escaping (Bool) -> Void, openBrowserSelection: @escaping () -> Void, openIntents: @escaping () -> Void, toggleEnableSensitiveContent: @escaping (Bool) -> Void) { + init(openStorageUsage: @escaping () -> Void, openNetworkUsage: @escaping () -> Void, openProxy: @escaping () -> Void, openAutomaticDownloadConnectionType: @escaping (AutomaticDownloadConnectionType) -> Void, resetAutomaticDownload: @escaping () -> Void, openVoiceUseLessData: @escaping () -> Void, openSaveIncomingPhotos: @escaping () -> Void, toggleSaveEditedPhotos: @escaping (Bool) -> Void, toggleAutoplayGifs: @escaping (Bool) -> Void, toggleAutoplayVideos: @escaping (Bool) -> Void, toggleDownloadInBackground: @escaping (Bool) -> Void, openBrowserSelection: @escaping () -> Void, openIntents: @escaping () -> Void, openWidgetSettings: @escaping () -> Void, toggleEnableSensitiveContent: @escaping (Bool) -> Void) { self.openStorageUsage = openStorageUsage self.openNetworkUsage = openNetworkUsage self.openProxy = openProxy @@ -43,6 +45,7 @@ private final class DataAndStorageControllerArguments { self.toggleDownloadInBackground = toggleDownloadInBackground self.openBrowserSelection = openBrowserSelection self.openIntents = openIntents + self.openWidgetSettings = openWidgetSettings self.toggleEnableSensitiveContent = toggleEnableSensitiveContent } } @@ -87,6 +90,7 @@ private enum DataAndStorageEntry: ItemListNodeEntry { case useLessVoiceData(PresentationTheme, String, String) case otherHeader(PresentationTheme, String) case shareSheet(PresentationTheme, String) + case widgetSettings(String) case saveIncomingPhotos(PresentationTheme, String) case saveEditedPhotos(PresentationTheme, String, Bool) case openLinksIn(PresentationTheme, String, String) @@ -106,7 +110,7 @@ private enum DataAndStorageEntry: ItemListNodeEntry { return DataAndStorageSection.autoPlay.rawValue case .voiceCallsHeader, .useLessVoiceData: return DataAndStorageSection.voiceCalls.rawValue - case .otherHeader, .shareSheet, .saveIncomingPhotos, .saveEditedPhotos, .openLinksIn, .downloadInBackground, .downloadInBackgroundInfo: + case .otherHeader, .shareSheet, .widgetSettings, .saveIncomingPhotos, .saveEditedPhotos, .openLinksIn, .downloadInBackground, .downloadInBackgroundInfo: return DataAndStorageSection.other.rawValue case .connectionHeader, .connectionProxy: return DataAndStorageSection.connection.rawValue @@ -143,22 +147,24 @@ private enum DataAndStorageEntry: ItemListNodeEntry { return 11 case .shareSheet: return 12 - case .saveIncomingPhotos: + case .widgetSettings: return 13 - case .saveEditedPhotos: + case .saveIncomingPhotos: return 14 - case .openLinksIn: + case .saveEditedPhotos: return 15 - case .downloadInBackground: + case .openLinksIn: return 16 - case .downloadInBackgroundInfo: + case .downloadInBackground: return 17 - case .connectionHeader: + case .downloadInBackgroundInfo: return 18 - case .connectionProxy: + case .connectionHeader: return 19 - case .enableSensitiveContent: + case .connectionProxy: return 20 + case .enableSensitiveContent: + return 21 } } @@ -242,6 +248,12 @@ private enum DataAndStorageEntry: ItemListNodeEntry { } else { return false } + case let .widgetSettings(text): + if case .widgetSettings(text) = rhs { + return true + } else { + return false + } case let .saveIncomingPhotos(lhsTheme, lhsText): if case let .saveIncomingPhotos(rhsTheme, rhsText) = rhs, lhsTheme === rhsTheme, lhsText == rhsText { return true @@ -346,6 +358,10 @@ private enum DataAndStorageEntry: ItemListNodeEntry { return ItemListDisclosureItem(presentationData: presentationData, title: text, label: "", sectionId: self.section, style: .blocks, action: { arguments.openIntents() }) + case let .widgetSettings(text): + return ItemListDisclosureItem(presentationData: presentationData, title: text, label: "", sectionId: self.section, style: .blocks, action: { + arguments.openWidgetSettings() + }) case let .saveIncomingPhotos(theme, text): return ItemListDisclosureItem(presentationData: presentationData, title: text, label: "", sectionId: self.section, style: .blocks, action: { arguments.openSaveIncomingPhotos() @@ -489,6 +505,9 @@ private func dataAndStorageControllerEntries(state: DataAndStorageControllerStat if #available(iOSApplicationExtension 13.2, iOS 13.2, *) { entries.append(.shareSheet(presentationData.theme, presentationData.strings.ChatSettings_IntentsSettings)) } + if #available(iOSApplicationExtension 14.0, iOS 14.0, *) { + entries.append(.widgetSettings(presentationData.strings.ChatSettings_WidgetSettings)) + } entries.append(.saveIncomingPhotos(presentationData.theme, presentationData.strings.Settings_SaveIncomingPhotos)) entries.append(.saveEditedPhotos(presentationData.theme, presentationData.strings.Settings_SaveEditedPhotos, data.generatedMediaStoreSettings.storeEditedPhotos)) entries.append(.openLinksIn(presentationData.theme, presentationData.strings.ChatSettings_OpenLinksIn, defaultWebBrowser)) @@ -641,6 +660,9 @@ public func dataAndStorageController(context: AccountContext, focusOnItemTag: Da }, openIntents: { let controller = intentsSettingsController(context: context) pushControllerImpl?(controller) + }, openWidgetSettings: { + let controller = widgetSetupScreen(context: context) + pushControllerImpl?(controller) }, toggleEnableSensitiveContent: { value in let _ = (contentSettingsConfiguration.get() |> take(1) diff --git a/submodules/TelegramPresentationData/Sources/PresentationStrings.swift b/submodules/TelegramPresentationData/Sources/PresentationStrings.swift index 3e231b7937..a5de623e65 100644 --- a/submodules/TelegramPresentationData/Sources/PresentationStrings.swift +++ b/submodules/TelegramPresentationData/Sources/PresentationStrings.swift @@ -4634,1042 +4634,1044 @@ public final class PresentationStrings: Equatable { public var GroupInfo_ScamGroupWarning: String { return self._s[4161]! } public var Conversation_EditingMessagePanelMedia: String { return self._s[4162]! } public var Appearance_PreviewIncomingText: String { return self._s[4163]! } - public var Notifications_ChannelNotificationsExceptionsHelp: String { return self._s[4164]! } - public var ChatList_UndoArchiveRevealedTitle: String { return self._s[4166]! } - public var Stats_GroupOverview: String { return self._s[4168]! } - public var ScheduledMessages_EditTime: String { return self._s[4171]! } - public var Month_GenFebruary: String { return self._s[4172]! } - public var ChatList_AutoarchiveSuggestion_OpenSettings: String { return self._s[4173]! } - public var Stickers_ClearRecent: String { return self._s[4174]! } - public var TwoStepAuth_EnterPasswordPassword: String { return self._s[4175]! } - public var Stats_Message_PublicShares: String { return self._s[4176]! } + public var ChatSettings_WidgetSettings: String { return self._s[4164]! } + public var Notifications_ChannelNotificationsExceptionsHelp: String { return self._s[4165]! } + public var ChatList_UndoArchiveRevealedTitle: String { return self._s[4167]! } + public var Stats_GroupOverview: String { return self._s[4169]! } + public var ScheduledMessages_EditTime: String { return self._s[4172]! } + public var Month_GenFebruary: String { return self._s[4173]! } + public var ChatList_AutoarchiveSuggestion_OpenSettings: String { return self._s[4174]! } + public var Stickers_ClearRecent: String { return self._s[4175]! } + public var TwoStepAuth_EnterPasswordPassword: String { return self._s[4176]! } + public var Stats_Message_PublicShares: String { return self._s[4177]! } public func Checkout_PayPrice(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4177]!, self._r[4177]!, [_0]) + return formatWithArgumentRanges(self._s[4178]!, self._r[4178]!, [_0]) } - public var Login_TermsOfServiceSignupDecline: String { return self._s[4178]! } - public var CheckoutInfo_ErrorCityInvalid: String { return self._s[4179]! } - public var VoiceOver_Chat_PlayHint: String { return self._s[4180]! } - public var ChatAdmins_AllMembersAreAdminsOffHelp: String { return self._s[4181]! } - public var CheckoutInfo_ShippingInfoTitle: String { return self._s[4183]! } - public var CreatePoll_Create: String { return self._s[4184]! } - public var ChatList_Search_FilterLinks: String { return self._s[4185]! } - public var Your_cards_number_is_invalid: String { return self._s[4186]! } - public var Month_ShortApril: String { return self._s[4187]! } - public var SocksProxySetup_UseForCalls: String { return self._s[4188]! } - public var Conversation_EditingCaptionPanelTitle: String { return self._s[4189]! } - public var SocksProxySetup_Status: String { return self._s[4190]! } - public var ChannelInfo_DeleteGroupConfirmation: String { return self._s[4191]! } - public var ChatListFolder_CategoryBots: String { return self._s[4192]! } - public var Passport_FieldIdentitySelfieHelp: String { return self._s[4194]! } - public var GroupInfo_BroadcastListNamePlaceholder: String { return self._s[4195]! } - public var Chat_PinnedListPreview_UnpinAllMessages: String { return self._s[4196]! } - public var Wallpaper_ResetWallpapersInfo: String { return self._s[4197]! } - public var Conversation_TitleUnmute: String { return self._s[4198]! } - public var Group_Setup_TypeHeader: String { return self._s[4199]! } - public var Stats_ViewsPerPost: String { return self._s[4200]! } - public var CheckoutInfo_ShippingInfoCountry: String { return self._s[4201]! } - public var Passport_Identity_TranslationHelp: String { return self._s[4202]! } + public var Login_TermsOfServiceSignupDecline: String { return self._s[4179]! } + public var CheckoutInfo_ErrorCityInvalid: String { return self._s[4180]! } + public var VoiceOver_Chat_PlayHint: String { return self._s[4181]! } + public var ChatAdmins_AllMembersAreAdminsOffHelp: String { return self._s[4182]! } + public var CheckoutInfo_ShippingInfoTitle: String { return self._s[4184]! } + public var CreatePoll_Create: String { return self._s[4185]! } + public var ChatList_Search_FilterLinks: String { return self._s[4186]! } + public var Your_cards_number_is_invalid: String { return self._s[4187]! } + public var Month_ShortApril: String { return self._s[4188]! } + public var SocksProxySetup_UseForCalls: String { return self._s[4189]! } + public var Conversation_EditingCaptionPanelTitle: String { return self._s[4190]! } + public var SocksProxySetup_Status: String { return self._s[4191]! } + public var ChannelInfo_DeleteGroupConfirmation: String { return self._s[4192]! } + public var ChatListFolder_CategoryBots: String { return self._s[4193]! } + public var Passport_FieldIdentitySelfieHelp: String { return self._s[4195]! } + public var GroupInfo_BroadcastListNamePlaceholder: String { return self._s[4196]! } + public var Chat_PinnedListPreview_UnpinAllMessages: String { return self._s[4197]! } + public var Wallpaper_ResetWallpapersInfo: String { return self._s[4198]! } + public var Conversation_TitleUnmute: String { return self._s[4199]! } + public var Group_Setup_TypeHeader: String { return self._s[4200]! } + public var Stats_ViewsPerPost: String { return self._s[4201]! } + public var CheckoutInfo_ShippingInfoCountry: String { return self._s[4202]! } + public var Passport_Identity_TranslationHelp: String { return self._s[4203]! } public func PUSH_CHANNEL_MESSAGE_FWD(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4203]!, self._r[4203]!, [_1]) + return formatWithArgumentRanges(self._s[4204]!, self._r[4204]!, [_1]) } - public var GroupInfo_Administrators_Title: String { return self._s[4204]! } + public var GroupInfo_Administrators_Title: String { return self._s[4205]! } public func Channel_AdminLog_MessageRankName(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4205]!, self._r[4205]!, [_1, _2]) + return formatWithArgumentRanges(self._s[4206]!, self._r[4206]!, [_1, _2]) } public func PUSH_CHAT_MESSAGE_POLL(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4206]!, self._r[4206]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[4207]!, self._r[4207]!, [_1, _2, _3]) } - public var Wallet_Receive_Title: String { return self._s[4207]! } - public var CheckoutInfo_ShippingInfoState: String { return self._s[4208]! } - public var Passport_Language_my: String { return self._s[4210]! } - public var PrivacyLastSeenSettings_AlwaysShareWith_Title: String { return self._s[4211]! } - public var Map_PlacesNearby: String { return self._s[4212]! } - public var Channel_About_Help: String { return self._s[4213]! } - public var LogoutOptions_AddAccountTitle: String { return self._s[4214]! } - public var ChatSettings_AutomaticAudioDownload: String { return self._s[4215]! } - public var Channel_Username_Title: String { return self._s[4216]! } - public var Activity_RecordingVideoMessage: String { return self._s[4217]! } + public var Wallet_Receive_Title: String { return self._s[4208]! } + public var CheckoutInfo_ShippingInfoState: String { return self._s[4209]! } + public var Passport_Language_my: String { return self._s[4211]! } + public var PrivacyLastSeenSettings_AlwaysShareWith_Title: String { return self._s[4212]! } + public var Map_PlacesNearby: String { return self._s[4213]! } + public var Channel_About_Help: String { return self._s[4214]! } + public var LogoutOptions_AddAccountTitle: String { return self._s[4215]! } + public var ChatSettings_AutomaticAudioDownload: String { return self._s[4216]! } + public var Channel_Username_Title: String { return self._s[4217]! } + public var Activity_RecordingVideoMessage: String { return self._s[4218]! } public func StickerPackActionInfo_RemovedText(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4218]!, self._r[4218]!, [_0]) + return formatWithArgumentRanges(self._s[4219]!, self._r[4219]!, [_0]) } - public var CheckoutInfo_ShippingInfoCity: String { return self._s[4219]! } - public var Passport_DiscardMessageDescription: String { return self._s[4220]! } - public var Conversation_LinkDialogOpen: String { return self._s[4221]! } - public var ChatList_Context_HideArchive: String { return self._s[4222]! } + public var CheckoutInfo_ShippingInfoCity: String { return self._s[4220]! } + public var Passport_DiscardMessageDescription: String { return self._s[4221]! } + public var Conversation_LinkDialogOpen: String { return self._s[4222]! } + public var ChatList_Context_HideArchive: String { return self._s[4223]! } public func Message_AuthorPinnedGame(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4223]!, self._r[4223]!, [_0]) + return formatWithArgumentRanges(self._s[4224]!, self._r[4224]!, [_0]) } - public var Privacy_GroupsAndChannels_CustomShareHelp: String { return self._s[4224]! } - public var Conversation_Admin: String { return self._s[4225]! } - public var DialogList_TabTitle: String { return self._s[4226]! } + public var Privacy_GroupsAndChannels_CustomShareHelp: String { return self._s[4225]! } + public var Conversation_Admin: String { return self._s[4226]! } + public var DialogList_TabTitle: String { return self._s[4227]! } public func PUSH_CHAT_ALBUM(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4227]!, self._r[4227]!, [_1, _2]) + return formatWithArgumentRanges(self._s[4228]!, self._r[4228]!, [_1, _2]) } - public var Notifications_PermissionsUnreachableText: String { return self._s[4228]! } - public var Passport_Identity_GenderMale: String { return self._s[4230]! } - public var SettingsSearch_Synonyms_Privacy_BlockedUsers: String { return self._s[4232]! } - public var PhoneNumberHelp_Alert: String { return self._s[4233]! } - public var EnterPasscode_EnterNewPasscodeChange: String { return self._s[4234]! } - public var Notifications_InAppNotifications: String { return self._s[4235]! } + public var Notifications_PermissionsUnreachableText: String { return self._s[4229]! } + public var Passport_Identity_GenderMale: String { return self._s[4231]! } + public var SettingsSearch_Synonyms_Privacy_BlockedUsers: String { return self._s[4233]! } + public var PhoneNumberHelp_Alert: String { return self._s[4234]! } + public var EnterPasscode_EnterNewPasscodeChange: String { return self._s[4235]! } + public var Notifications_InAppNotifications: String { return self._s[4236]! } public func Update_AppVersion(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4236]!, self._r[4236]!, [_0]) + return formatWithArgumentRanges(self._s[4237]!, self._r[4237]!, [_0]) } - public var Notification_VideoCallOutgoing: String { return self._s[4237]! } - public var Login_InvalidCodeError: String { return self._s[4238]! } - public var Conversation_PrivateChannelTimeLimitedAlertJoin: String { return self._s[4239]! } + public var Notification_VideoCallOutgoing: String { return self._s[4238]! } + public var Login_InvalidCodeError: String { return self._s[4239]! } + public var Conversation_PrivateChannelTimeLimitedAlertJoin: String { return self._s[4240]! } public func LastSeen_TodayAt(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4240]!, self._r[4240]!, [_0]) + return formatWithArgumentRanges(self._s[4241]!, self._r[4241]!, [_0]) } - public var Conversation_InputTextCaptionPlaceholder: String { return self._s[4242]! } - public var ReportPeer_Report: String { return self._s[4243]! } - public var Camera_FlashOff: String { return self._s[4246]! } - public var Conversation_InputTextBroadcastPlaceholder: String { return self._s[4249]! } - public var PrivacyPolicy_DeclineTitle: String { return self._s[4252]! } - public var SettingsSearch_Synonyms_Privacy_PasscodeAndTouchId: String { return self._s[4253]! } - public var Passport_FieldEmail: String { return self._s[4254]! } + public var Conversation_InputTextCaptionPlaceholder: String { return self._s[4243]! } + public var ReportPeer_Report: String { return self._s[4244]! } + public var Camera_FlashOff: String { return self._s[4247]! } + public var Conversation_InputTextBroadcastPlaceholder: String { return self._s[4250]! } + public var PrivacyPolicy_DeclineTitle: String { return self._s[4253]! } + public var SettingsSearch_Synonyms_Privacy_PasscodeAndTouchId: String { return self._s[4254]! } + public var Passport_FieldEmail: String { return self._s[4255]! } public func Channel_AdminLog_MessageKickedName(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4255]!, self._r[4255]!, [_1]) + return formatWithArgumentRanges(self._s[4256]!, self._r[4256]!, [_1]) } - public var Notifications_ExceptionsResetToDefaults: String { return self._s[4256]! } - public var PeerInfo_PaneVoiceAndVideo: String { return self._s[4257]! } - public var Group_OwnershipTransfer_Title: String { return self._s[4258]! } - public var Conversation_DefaultRestrictedInline: String { return self._s[4259]! } - public var Login_PhoneNumberHelp: String { return self._s[4261]! } - public var Channel_AdminLogFilter_EventsNewMembers: String { return self._s[4262]! } - public var Conversation_PinnedQuiz: String { return self._s[4263]! } - public var CreateGroup_SoftUserLimitAlert: String { return self._s[4264]! } - public var Login_PhoneNumberAlreadyAuthorizedSwitch: String { return self._s[4265]! } - public var Group_MessagePhotoUpdated: String { return self._s[4266]! } - public var LoginPassword_PasswordPlaceholder: String { return self._s[4267]! } - public var Passport_Identity_Translations: String { return self._s[4269]! } - public var ChatAdmins_AllMembersAreAdmins: String { return self._s[4270]! } - public var ChannelInfo_DeleteChannel: String { return self._s[4272]! } - public var PasscodeSettings_HelpBottom: String { return self._s[4273]! } - public var Channel_Members_AddMembers: String { return self._s[4274]! } - public var AutoDownloadSettings_LastDelimeter: String { return self._s[4275]! } - public var Notification_Exceptions_DeleteAllConfirmation: String { return self._s[4277]! } - public var Conversation_HoldForAudio: String { return self._s[4278]! } - public var Watch_LastSeen_Lately: String { return self._s[4280]! } - public var ChatList_Context_MarkAsRead: String { return self._s[4281]! } - public var Conversation_PinnedMessage: String { return self._s[4282]! } - public var SettingsSearch_Synonyms_Appearance_ColorTheme: String { return self._s[4283]! } - public var Passport_UpdateRequiredError: String { return self._s[4285]! } - public var PrivacySettings_Passcode: String { return self._s[4286]! } + public var Notifications_ExceptionsResetToDefaults: String { return self._s[4257]! } + public var PeerInfo_PaneVoiceAndVideo: String { return self._s[4258]! } + public var Group_OwnershipTransfer_Title: String { return self._s[4259]! } + public var Conversation_DefaultRestrictedInline: String { return self._s[4260]! } + public var Login_PhoneNumberHelp: String { return self._s[4262]! } + public var Channel_AdminLogFilter_EventsNewMembers: String { return self._s[4263]! } + public var Conversation_PinnedQuiz: String { return self._s[4264]! } + public var CreateGroup_SoftUserLimitAlert: String { return self._s[4265]! } + public var Login_PhoneNumberAlreadyAuthorizedSwitch: String { return self._s[4266]! } + public var Group_MessagePhotoUpdated: String { return self._s[4267]! } + public var LoginPassword_PasswordPlaceholder: String { return self._s[4268]! } + public var Passport_Identity_Translations: String { return self._s[4270]! } + public var ChatAdmins_AllMembersAreAdmins: String { return self._s[4271]! } + public var ChannelInfo_DeleteChannel: String { return self._s[4273]! } + public var PasscodeSettings_HelpBottom: String { return self._s[4274]! } + public var Channel_Members_AddMembers: String { return self._s[4275]! } + public var AutoDownloadSettings_LastDelimeter: String { return self._s[4276]! } + public var Notification_Exceptions_DeleteAllConfirmation: String { return self._s[4278]! } + public var Conversation_HoldForAudio: String { return self._s[4279]! } + public var Watch_LastSeen_Lately: String { return self._s[4281]! } + public var ChatList_Context_MarkAsRead: String { return self._s[4282]! } + public var Conversation_PinnedMessage: String { return self._s[4283]! } + public var SettingsSearch_Synonyms_Appearance_ColorTheme: String { return self._s[4284]! } + public var Passport_UpdateRequiredError: String { return self._s[4286]! } + public var PrivacySettings_Passcode: String { return self._s[4287]! } public func Call_EmojiDescription(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4287]!, self._r[4287]!, [_0]) + return formatWithArgumentRanges(self._s[4288]!, self._r[4288]!, [_0]) } - public var AutoNightTheme_NotAvailable: String { return self._s[4288]! } - public var Conversation_PressVolumeButtonForSound: String { return self._s[4289]! } - public var LoginPassword_InvalidPasswordError: String { return self._s[4290]! } - public var ChatListFolder_IncludedSectionHeader: String { return self._s[4291]! } - public var Channel_SignMessages_Help: String { return self._s[4292]! } - public var ChatList_DeleteForEveryoneConfirmationTitle: String { return self._s[4293]! } - public var Conversation_TitleNoComments: String { return self._s[4294]! } - public var MediaPicker_LivePhotoDescription: String { return self._s[4295]! } - public var GroupInfo_Permissions: String { return self._s[4296]! } - public var GroupPermission_NoSendLinks: String { return self._s[4299]! } - public var Passport_Identity_ResidenceCountry: String { return self._s[4300]! } - public var Appearance_ThemeCarouselNightBlue: String { return self._s[4302]! } - public var ChatList_ArchiveAction: String { return self._s[4303]! } + public var AutoNightTheme_NotAvailable: String { return self._s[4289]! } + public var Conversation_PressVolumeButtonForSound: String { return self._s[4290]! } + public var LoginPassword_InvalidPasswordError: String { return self._s[4291]! } + public var ChatListFolder_IncludedSectionHeader: String { return self._s[4292]! } + public var Channel_SignMessages_Help: String { return self._s[4293]! } + public var ChatList_DeleteForEveryoneConfirmationTitle: String { return self._s[4294]! } + public var Conversation_TitleNoComments: String { return self._s[4295]! } + public var MediaPicker_LivePhotoDescription: String { return self._s[4296]! } + public var GroupInfo_Permissions: String { return self._s[4297]! } + public var GroupPermission_NoSendLinks: String { return self._s[4300]! } + public var Passport_Identity_ResidenceCountry: String { return self._s[4301]! } + public var Appearance_ThemeCarouselNightBlue: String { return self._s[4303]! } + public var ChatList_ArchiveAction: String { return self._s[4304]! } public func Channel_AdminLog_DisabledSlowmode(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4304]!, self._r[4304]!, [_0]) + return formatWithArgumentRanges(self._s[4305]!, self._r[4305]!, [_0]) } - public var GroupInfo_GroupHistory: String { return self._s[4305]! } + public var GroupInfo_GroupHistory: String { return self._s[4306]! } public func Channel_Management_ErrorNotMember(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4307]!, self._r[4307]!, [_0]) + return formatWithArgumentRanges(self._s[4308]!, self._r[4308]!, [_0]) } - public var Privacy_Forwards_LinkIfAllowed: String { return self._s[4309]! } - public var Channel_Info_Banned: String { return self._s[4310]! } - public var Paint_RecentStickers: String { return self._s[4311]! } - public var VoiceOver_MessageContextSend: String { return self._s[4312]! } - public var Group_ErrorNotMutualContact: String { return self._s[4313]! } - public var ReportPeer_ReasonOther: String { return self._s[4315]! } - public var Channel_BanUser_PermissionChangeGroupInfo: String { return self._s[4316]! } - public var SocksProxySetup_ShareQRCodeInfo: String { return self._s[4318]! } - public var KeyCommand_Find: String { return self._s[4319]! } + public var Privacy_Forwards_LinkIfAllowed: String { return self._s[4310]! } + public var Channel_Info_Banned: String { return self._s[4311]! } + public var Paint_RecentStickers: String { return self._s[4312]! } + public var VoiceOver_MessageContextSend: String { return self._s[4313]! } + public var Group_ErrorNotMutualContact: String { return self._s[4314]! } + public var ReportPeer_ReasonOther: String { return self._s[4316]! } + public var Channel_BanUser_PermissionChangeGroupInfo: String { return self._s[4317]! } + public var SocksProxySetup_ShareQRCodeInfo: String { return self._s[4319]! } + public var KeyCommand_Find: String { return self._s[4320]! } public func Channel_MessageTitleUpdated(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4320]!, self._r[4320]!, [_0]) + return formatWithArgumentRanges(self._s[4321]!, self._r[4321]!, [_0]) } - public var ChatList_Context_Unmute: String { return self._s[4321]! } - public var Chat_SlowmodeAttachmentLimitReached: String { return self._s[4322]! } - public var Stickers_GroupStickersHelp: String { return self._s[4323]! } - public var Wallet_Configuration_BlockchainIdPlaceholder: String { return self._s[4324]! } - public var Checkout_Title: String { return self._s[4325]! } - public var Activity_RecordingAudio: String { return self._s[4326]! } - public var SettingsSearch_Synonyms_Notifications_GroupNotificationsPreview: String { return self._s[4327]! } - public var BlockedUsers_BlockTitle: String { return self._s[4328]! } - public var Wallet_Month_ShortFebruary: String { return self._s[4330]! } - public var Calls_All: String { return self._s[4331]! } - public var DialogList_SavedMessagesHelp: String { return self._s[4333]! } - public var Settings_FAQ_Button: String { return self._s[4334]! } - public var Conversation_Dice_u1F3B0: String { return self._s[4336]! } + public var ChatList_Context_Unmute: String { return self._s[4322]! } + public var Chat_SlowmodeAttachmentLimitReached: String { return self._s[4323]! } + public var Stickers_GroupStickersHelp: String { return self._s[4324]! } + public var Wallet_Configuration_BlockchainIdPlaceholder: String { return self._s[4325]! } + public var Checkout_Title: String { return self._s[4326]! } + public var Activity_RecordingAudio: String { return self._s[4327]! } + public var SettingsSearch_Synonyms_Notifications_GroupNotificationsPreview: String { return self._s[4328]! } + public var BlockedUsers_BlockTitle: String { return self._s[4329]! } + public var Wallet_Month_ShortFebruary: String { return self._s[4331]! } + public var Calls_All: String { return self._s[4332]! } + public var DialogList_SavedMessagesHelp: String { return self._s[4334]! } + public var Settings_FAQ_Button: String { return self._s[4335]! } + public var Conversation_Dice_u1F3B0: String { return self._s[4337]! } public func Time_MonthOfYear_m5(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4337]!, self._r[4337]!, [_0]) + return formatWithArgumentRanges(self._s[4338]!, self._r[4338]!, [_0]) } - public var Conversation_ReportGroupLocation: String { return self._s[4338]! } - public var Passport_Scans_Upload: String { return self._s[4339]! } - public var Channel_EditAdmin_PermissionPinMessages: String { return self._s[4341]! } - public var ChatList_UnarchiveAction: String { return self._s[4342]! } - public var Stats_GroupTopInviter_History: String { return self._s[4343]! } - public var GroupInfo_Permissions_Title: String { return self._s[4344]! } - public var Passport_Language_el: String { return self._s[4345]! } + public var Conversation_ReportGroupLocation: String { return self._s[4339]! } + public var Passport_Scans_Upload: String { return self._s[4340]! } + public var Channel_EditAdmin_PermissionPinMessages: String { return self._s[4342]! } + public var ChatList_UnarchiveAction: String { return self._s[4343]! } + public var Stats_GroupTopInviter_History: String { return self._s[4344]! } + public var GroupInfo_Permissions_Title: String { return self._s[4345]! } + public var Passport_Language_el: String { return self._s[4346]! } public func Wallet_Time_PreciseDate_m4(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4346]!, self._r[4346]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[4347]!, self._r[4347]!, [_1, _2, _3]) } - public var Channel_DiscussionMessageUnavailable: String { return self._s[4347]! } - public var GroupInfo_ActionPromote: String { return self._s[4348]! } - public var Group_OwnershipTransfer_ErrorLocatedGroupsTooMuch: String { return self._s[4349]! } + public var Channel_DiscussionMessageUnavailable: String { return self._s[4348]! } + public var GroupInfo_ActionPromote: String { return self._s[4349]! } + public var Group_OwnershipTransfer_ErrorLocatedGroupsTooMuch: String { return self._s[4350]! } public func TwoStepAuth_PendingEmailHelp(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4350]!, self._r[4350]!, [_0]) + return formatWithArgumentRanges(self._s[4351]!, self._r[4351]!, [_0]) } - public var VoiceOver_Chat_Reply: String { return self._s[4351]! } - public var Month_GenMay: String { return self._s[4352]! } - public var DialogList_DeleteBotConversationConfirmation: String { return self._s[4353]! } - public var Chat_PsaTooltip_covid: String { return self._s[4354]! } - public var Watch_Suggestion_CantTalk: String { return self._s[4355]! } - public var Privacy_GroupsAndChannels_NeverAllow_Title: String { return self._s[4356]! } - public var AppUpgrade_Running: String { return self._s[4357]! } - public var PasscodeSettings_UnlockWithFaceId: String { return self._s[4360]! } - public var Notification_Exceptions_PreviewAlwaysOff: String { return self._s[4361]! } - public var SharedMedia_EmptyText: String { return self._s[4362]! } - public var Passport_Address_EditResidentialAddress: String { return self._s[4363]! } - public var SettingsSearch_Synonyms_Notifications_GroupNotificationsAlert: String { return self._s[4364]! } - public var Message_PinnedGame: String { return self._s[4365]! } - public var KeyCommand_SearchInChat: String { return self._s[4366]! } - public var Appearance_ThemeCarouselNewNight: String { return self._s[4367]! } - public var ChatList_Search_FilterMedia: String { return self._s[4368]! } - public var Message_PinnedAudioMessage: String { return self._s[4369]! } - public var ChannelInfo_ConfirmLeave: String { return self._s[4370]! } + public var VoiceOver_Chat_Reply: String { return self._s[4352]! } + public var Month_GenMay: String { return self._s[4353]! } + public var DialogList_DeleteBotConversationConfirmation: String { return self._s[4354]! } + public var Chat_PsaTooltip_covid: String { return self._s[4355]! } + public var Watch_Suggestion_CantTalk: String { return self._s[4356]! } + public var Privacy_GroupsAndChannels_NeverAllow_Title: String { return self._s[4357]! } + public var AppUpgrade_Running: String { return self._s[4358]! } + public var PasscodeSettings_UnlockWithFaceId: String { return self._s[4361]! } + public var Notification_Exceptions_PreviewAlwaysOff: String { return self._s[4362]! } + public var SharedMedia_EmptyText: String { return self._s[4363]! } + public var Passport_Address_EditResidentialAddress: String { return self._s[4364]! } + public var SettingsSearch_Synonyms_Notifications_GroupNotificationsAlert: String { return self._s[4365]! } + public var Message_PinnedGame: String { return self._s[4366]! } + public var KeyCommand_SearchInChat: String { return self._s[4367]! } + public var Appearance_ThemeCarouselNewNight: String { return self._s[4368]! } + public var ChatList_Search_FilterMedia: String { return self._s[4369]! } + public var Message_PinnedAudioMessage: String { return self._s[4370]! } + public var ChannelInfo_ConfirmLeave: String { return self._s[4371]! } public func Channel_AdminLog_MessagePromotedNameUsername(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4371]!, self._r[4371]!, [_1, _2]) + return formatWithArgumentRanges(self._s[4372]!, self._r[4372]!, [_1, _2]) } - public var SocksProxySetup_ProxyStatusUnavailable: String { return self._s[4372]! } + public var SocksProxySetup_ProxyStatusUnavailable: String { return self._s[4373]! } public func Passport_Email_CodeHelp(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4373]!, self._r[4373]!, [_0]) + return formatWithArgumentRanges(self._s[4374]!, self._r[4374]!, [_0]) } - public var Wallet_Receive_AddressCopied: String { return self._s[4374]! } + public var Wallet_Receive_AddressCopied: String { return self._s[4375]! } public func Message_PinnedTextMessage(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4375]!, self._r[4375]!, [_0]) + return formatWithArgumentRanges(self._s[4376]!, self._r[4376]!, [_0]) } - public var Settings_AddAccount: String { return self._s[4376]! } - public var Channel_AdminLog_CanDeleteMessages: String { return self._s[4377]! } - public var Conversation_DiscardVoiceMessageTitle: String { return self._s[4378]! } - public var Channel_JoinChannel: String { return self._s[4379]! } - public var Watch_UserInfo_Unblock: String { return self._s[4380]! } - public var PhoneLabel_Title: String { return self._s[4381]! } - public var Group_Setup_HistoryHiddenHelp: String { return self._s[4383]! } - public var Privacy_ProfilePhoto_AlwaysShareWith_Title: String { return self._s[4384]! } + public var Settings_AddAccount: String { return self._s[4377]! } + public var Channel_AdminLog_CanDeleteMessages: String { return self._s[4378]! } + public var Conversation_DiscardVoiceMessageTitle: String { return self._s[4379]! } + public var Channel_JoinChannel: String { return self._s[4380]! } + public var Watch_UserInfo_Unblock: String { return self._s[4381]! } + public var PhoneLabel_Title: String { return self._s[4382]! } + public var Group_Setup_HistoryHiddenHelp: String { return self._s[4384]! } + public var Privacy_ProfilePhoto_AlwaysShareWith_Title: String { return self._s[4385]! } public func Login_PhoneGenericEmailBody(_ _1: String, _ _2: String, _ _3: String, _ _4: String, _ _5: String, _ _6: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4385]!, self._r[4385]!, [_1, _2, _3, _4, _5, _6]) + return formatWithArgumentRanges(self._s[4386]!, self._r[4386]!, [_1, _2, _3, _4, _5, _6]) } - public var Wallet_Month_GenOctober: String { return self._s[4386]! } - public var Channel_AddBotErrorHaveRights: String { return self._s[4387]! } - public var ChatList_TabIconFoldersTooltipNonEmptyFolders: String { return self._s[4388]! } - public var DialogList_EncryptionProcessing: String { return self._s[4389]! } - public var ChatList_Search_FilterChats: String { return self._s[4390]! } - public var WatchRemote_NotificationText: String { return self._s[4391]! } - public var EditTheme_ChangeColors: String { return self._s[4392]! } - public var GroupRemoved_ViewUserInfo: String { return self._s[4393]! } - public var Wallet_TransactionInfo_RecipientHeader: String { return self._s[4394]! } - public var CallSettings_OnMobile: String { return self._s[4396]! } - public var Month_ShortFebruary: String { return self._s[4398]! } - public var VoiceOver_MessageContextReply: String { return self._s[4399]! } + public var Wallet_Month_GenOctober: String { return self._s[4387]! } + public var Channel_AddBotErrorHaveRights: String { return self._s[4388]! } + public var ChatList_TabIconFoldersTooltipNonEmptyFolders: String { return self._s[4389]! } + public var DialogList_EncryptionProcessing: String { return self._s[4390]! } + public var ChatList_Search_FilterChats: String { return self._s[4391]! } + public var WatchRemote_NotificationText: String { return self._s[4392]! } + public var EditTheme_ChangeColors: String { return self._s[4393]! } + public var GroupRemoved_ViewUserInfo: String { return self._s[4394]! } + public var Wallet_TransactionInfo_RecipientHeader: String { return self._s[4395]! } + public var CallSettings_OnMobile: String { return self._s[4397]! } + public var Month_ShortFebruary: String { return self._s[4399]! } + public var VoiceOver_MessageContextReply: String { return self._s[4400]! } public func PUSH_VIDEO_CALL_REQUEST(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4400]!, self._r[4400]!, [_1]) + return formatWithArgumentRanges(self._s[4401]!, self._r[4401]!, [_1]) } - public var Group_Location_ChangeLocation: String { return self._s[4401]! } - public var Passport_Address_TypeBankStatementUploadScan: String { return self._s[4402]! } - public var Wallet_Send_EncryptComment: String { return self._s[4403]! } - public var VoiceOver_Media_PlaybackStop: String { return self._s[4404]! } - public var SettingsSearch_Synonyms_Data_SaveIncomingPhotos: String { return self._s[4405]! } + public var Group_Location_ChangeLocation: String { return self._s[4402]! } + public var Passport_Address_TypeBankStatementUploadScan: String { return self._s[4403]! } + public var Wallet_Send_EncryptComment: String { return self._s[4404]! } + public var VoiceOver_Media_PlaybackStop: String { return self._s[4405]! } + public var SettingsSearch_Synonyms_Data_SaveIncomingPhotos: String { return self._s[4406]! } public func Channel_AdminLog_MessageRestrictedUntil(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4407]!, self._r[4407]!, [_0]) + return formatWithArgumentRanges(self._s[4408]!, self._r[4408]!, [_0]) } - public var PhotoEditor_WarmthTool: String { return self._s[4408]! } - public var Login_InfoAvatarPhoto: String { return self._s[4409]! } - public var Notification_Exceptions_NewException_MessagePreviewHeader: String { return self._s[4410]! } - public var Permissions_CellularDataAllowInSettings_v0: String { return self._s[4411]! } - public var Map_PlacesInThisArea: String { return self._s[4412]! } - public var VoiceOver_Chat_ContactEmail: String { return self._s[4413]! } - public var Notifications_InAppNotificationsSounds: String { return self._s[4414]! } + public var PhotoEditor_WarmthTool: String { return self._s[4409]! } + public var Login_InfoAvatarPhoto: String { return self._s[4410]! } + public var Notification_Exceptions_NewException_MessagePreviewHeader: String { return self._s[4411]! } + public var Permissions_CellularDataAllowInSettings_v0: String { return self._s[4412]! } + public var Map_PlacesInThisArea: String { return self._s[4413]! } + public var VoiceOver_Chat_ContactEmail: String { return self._s[4414]! } + public var Notifications_InAppNotificationsSounds: String { return self._s[4415]! } public func PUSH_PINNED_NOTEXT(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4415]!, self._r[4415]!, [_1]) + return formatWithArgumentRanges(self._s[4416]!, self._r[4416]!, [_1]) } - public var ShareMenu_Send: String { return self._s[4416]! } - public var Username_InvalidStartsWithNumber: String { return self._s[4417]! } - public var Appearance_AppIconClassicX: String { return self._s[4418]! } + public var ShareMenu_Send: String { return self._s[4417]! } + public var Username_InvalidStartsWithNumber: String { return self._s[4418]! } + public var Appearance_AppIconClassicX: String { return self._s[4419]! } public func PUSH_CHANNEL_MESSAGE_ROUND(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4419]!, self._r[4419]!, [_1]) + return formatWithArgumentRanges(self._s[4420]!, self._r[4420]!, [_1]) } - public var Conversation_StopPoll: String { return self._s[4420]! } - public var InfoPlist_NSLocationAlwaysUsageDescription: String { return self._s[4422]! } - public var Passport_Identity_EditIdentityCard: String { return self._s[4423]! } - public var Appearance_ThemePreview_ChatList_3_Name: String { return self._s[4424]! } - public var Wallet_WordCheck_Title: String { return self._s[4425]! } - public var Conversation_Timer_Title: String { return self._s[4426]! } - public var Common_Next: String { return self._s[4427]! } - public var Notification_Exceptions_NewException: String { return self._s[4428]! } + public var Conversation_StopPoll: String { return self._s[4421]! } + public var InfoPlist_NSLocationAlwaysUsageDescription: String { return self._s[4423]! } + public var Passport_Identity_EditIdentityCard: String { return self._s[4424]! } + public var Appearance_ThemePreview_ChatList_3_Name: String { return self._s[4425]! } + public var Wallet_WordCheck_Title: String { return self._s[4426]! } + public var Conversation_Timer_Title: String { return self._s[4427]! } + public var Common_Next: String { return self._s[4428]! } + public var Notification_Exceptions_NewException: String { return self._s[4429]! } public func Generic_OpenHiddenLinkAlert(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4429]!, self._r[4429]!, [_0]) + return formatWithArgumentRanges(self._s[4430]!, self._r[4430]!, [_0]) } - public var AccessDenied_CallMicrophone: String { return self._s[4430]! } - public var SettingsSearch_Synonyms_Data_AutoDownloadUsingCellular: String { return self._s[4431]! } - public var ChangePhoneNumberCode_Help: String { return self._s[4432]! } - public var Passport_Identity_OneOfTypeIdentityCard: String { return self._s[4433]! } - public var Channel_AdminLogFilter_EventsLeaving: String { return self._s[4434]! } - public var BlockedUsers_LeavePrefix: String { return self._s[4435]! } + public var AccessDenied_CallMicrophone: String { return self._s[4431]! } + public var SettingsSearch_Synonyms_Data_AutoDownloadUsingCellular: String { return self._s[4432]! } + public var ChangePhoneNumberCode_Help: String { return self._s[4433]! } + public var Passport_Identity_OneOfTypeIdentityCard: String { return self._s[4434]! } + public var Channel_AdminLogFilter_EventsLeaving: String { return self._s[4435]! } + public var BlockedUsers_LeavePrefix: String { return self._s[4436]! } public func Passport_RequestHeader(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4436]!, self._r[4436]!, [_0]) + return formatWithArgumentRanges(self._s[4437]!, self._r[4437]!, [_0]) } - public var Group_About_Help: String { return self._s[4437]! } - public var TwoStepAuth_ChangePasswordDescription: String { return self._s[4438]! } - public var Tour_Title3: String { return self._s[4439]! } - public var Watch_Conversation_Unblock: String { return self._s[4440]! } - public var Watch_UserInfo_Block: String { return self._s[4441]! } - public var Notifications_ChannelNotificationsAlert: String { return self._s[4442]! } - public var TwoFactorSetup_Hint_Action: String { return self._s[4443]! } - public var IntentsSettings_SuggestedChatsInfo: String { return self._s[4444]! } - public var Wallet_Alert_Cancel: String { return self._s[4445]! } - public var TextFormat_AddLinkTitle: String { return self._s[4446]! } - public var GroupInfo_InviteLink_RevokeAlert_Revoke: String { return self._s[4447]! } - public var TwoStepAuth_EnterPasswordTitle: String { return self._s[4448]! } - public var FastTwoStepSetup_PasswordSection: String { return self._s[4449]! } - public var Compose_ChannelMembers: String { return self._s[4450]! } - public var Conversation_ForwardTitle: String { return self._s[4451]! } + public var Group_About_Help: String { return self._s[4438]! } + public var TwoStepAuth_ChangePasswordDescription: String { return self._s[4439]! } + public var Tour_Title3: String { return self._s[4440]! } + public var Watch_Conversation_Unblock: String { return self._s[4441]! } + public var Watch_UserInfo_Block: String { return self._s[4442]! } + public var Notifications_ChannelNotificationsAlert: String { return self._s[4443]! } + public var TwoFactorSetup_Hint_Action: String { return self._s[4444]! } + public var IntentsSettings_SuggestedChatsInfo: String { return self._s[4445]! } + public var Wallet_Alert_Cancel: String { return self._s[4446]! } + public var TextFormat_AddLinkTitle: String { return self._s[4447]! } + public var GroupInfo_InviteLink_RevokeAlert_Revoke: String { return self._s[4448]! } + public var TwoStepAuth_EnterPasswordTitle: String { return self._s[4449]! } + public var FastTwoStepSetup_PasswordSection: String { return self._s[4450]! } + public var Compose_ChannelMembers: String { return self._s[4451]! } + public var Conversation_ForwardTitle: String { return self._s[4452]! } public func Wallet_Updated_AtDate(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4452]!, self._r[4452]!, [_0]) + return formatWithArgumentRanges(self._s[4453]!, self._r[4453]!, [_0]) } - public var Conversation_PinnedPoll: String { return self._s[4454]! } + public var Conversation_PinnedPoll: String { return self._s[4455]! } public func VoiceOver_Chat_AnonymousPollFrom(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4455]!, self._r[4455]!, [_0]) + return formatWithArgumentRanges(self._s[4456]!, self._r[4456]!, [_0]) } - public var SettingsSearch_Synonyms_EditProfile_AddAccount: String { return self._s[4456]! } - public var Conversation_ContextMenuStickerPackAdd: String { return self._s[4457]! } - public var Stats_Overview: String { return self._s[4458]! } - public var Map_HomeAndWorkTitle: String { return self._s[4459]! } - public var Wallet_Intro_Terms: String { return self._s[4460]! } + public var SettingsSearch_Synonyms_EditProfile_AddAccount: String { return self._s[4457]! } + public var Conversation_ContextMenuStickerPackAdd: String { return self._s[4458]! } + public var Stats_Overview: String { return self._s[4459]! } + public var Map_HomeAndWorkTitle: String { return self._s[4460]! } + public var Wallet_Intro_Terms: String { return self._s[4461]! } public func Time_PreciseDate_m4(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4461]!, self._r[4461]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[4462]!, self._r[4462]!, [_1, _2, _3]) } - public var Passport_Address_CityPlaceholder: String { return self._s[4462]! } - public var InfoPlist_NSLocationAlwaysAndWhenInUseUsageDescription: String { return self._s[4463]! } - public var Privacy_PhoneNumber: String { return self._s[4464]! } - public var ChatList_Search_FilterFiles: String { return self._s[4465]! } - public var ChatList_DeleteForEveryoneConfirmationAction: String { return self._s[4466]! } - public var ChannelIntro_CreateChannel: String { return self._s[4467]! } - public var Conversation_InputTextAnonymousPlaceholder: String { return self._s[4468]! } + public var Passport_Address_CityPlaceholder: String { return self._s[4463]! } + public var InfoPlist_NSLocationAlwaysAndWhenInUseUsageDescription: String { return self._s[4464]! } + public var Privacy_PhoneNumber: String { return self._s[4465]! } + public var ChatList_Search_FilterFiles: String { return self._s[4466]! } + public var ChatList_DeleteForEveryoneConfirmationAction: String { return self._s[4467]! } + public var ChannelIntro_CreateChannel: String { return self._s[4468]! } + public var Conversation_InputTextAnonymousPlaceholder: String { return self._s[4469]! } public func Login_EmailCodeBody(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4469]!, self._r[4469]!, [_0]) + return formatWithArgumentRanges(self._s[4470]!, self._r[4470]!, [_0]) } - public var Weekday_ShortMonday: String { return self._s[4470]! } - public var Passport_Language_ar: String { return self._s[4472]! } - public var SettingsSearch_Synonyms_EditProfile_Title: String { return self._s[4473]! } - public var TwoFactorSetup_Done_Title: String { return self._s[4474]! } - public var Calls_RatingFeedback: String { return self._s[4475]! } - public var SettingsSearch_Synonyms_Notifications_ChannelNotificationsPreview: String { return self._s[4476]! } - public var AutoDownloadSettings_ResetSettings: String { return self._s[4479]! } - public var Watch_Compose_Send: String { return self._s[4480]! } - public var PasscodeSettings_ChangePasscode: String { return self._s[4481]! } - public var WebSearch_RecentSectionClear: String { return self._s[4482]! } + public var Weekday_ShortMonday: String { return self._s[4471]! } + public var Passport_Language_ar: String { return self._s[4473]! } + public var SettingsSearch_Synonyms_EditProfile_Title: String { return self._s[4474]! } + public var TwoFactorSetup_Done_Title: String { return self._s[4475]! } + public var Calls_RatingFeedback: String { return self._s[4476]! } + public var SettingsSearch_Synonyms_Notifications_ChannelNotificationsPreview: String { return self._s[4477]! } + public var AutoDownloadSettings_ResetSettings: String { return self._s[4480]! } + public var Watch_Compose_Send: String { return self._s[4481]! } + public var PasscodeSettings_ChangePasscode: String { return self._s[4482]! } + public var WebSearch_RecentSectionClear: String { return self._s[4483]! } public func Contacts_AccessDeniedHelpPortrait(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4483]!, self._r[4483]!, [_0]) + return formatWithArgumentRanges(self._s[4484]!, self._r[4484]!, [_0]) } - public var WallpaperSearch_ColorTeal: String { return self._s[4484]! } - public var Wallpaper_SetCustomBackgroundInfo: String { return self._s[4485]! } - public var Permissions_ContactsTitle_v0: String { return self._s[4486]! } - public var Checkout_PasswordEntry_Pay: String { return self._s[4488]! } - public var Settings_SavedMessages: String { return self._s[4489]! } - public var TwoStepAuth_ReEnterPasswordDescription: String { return self._s[4490]! } - public var Month_ShortMarch: String { return self._s[4491]! } - public var Message_Location: String { return self._s[4492]! } + public var WallpaperSearch_ColorTeal: String { return self._s[4485]! } + public var Wallpaper_SetCustomBackgroundInfo: String { return self._s[4486]! } + public var Permissions_ContactsTitle_v0: String { return self._s[4487]! } + public var Checkout_PasswordEntry_Pay: String { return self._s[4489]! } + public var Settings_SavedMessages: String { return self._s[4490]! } + public var TwoStepAuth_ReEnterPasswordDescription: String { return self._s[4491]! } + public var Month_ShortMarch: String { return self._s[4492]! } + public var Message_Location: String { return self._s[4493]! } public func PUSH_MESSAGE_GIF(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4493]!, self._r[4493]!, [_1]) + return formatWithArgumentRanges(self._s[4494]!, self._r[4494]!, [_1]) } public func Notification_CallTimeFormat(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4494]!, self._r[4494]!, [_1, _2]) + return formatWithArgumentRanges(self._s[4495]!, self._r[4495]!, [_1, _2]) } - public var VoiceOver_Chat_VoiceMessage: String { return self._s[4496]! } + public var VoiceOver_Chat_VoiceMessage: String { return self._s[4497]! } public func Channel_AdminLog_MessageChangedUnlinkedChannel(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4497]!, self._r[4497]!, [_1, _2]) + return formatWithArgumentRanges(self._s[4498]!, self._r[4498]!, [_1, _2]) } - public var GroupPermission_NoSendMedia: String { return self._s[4498]! } - public var Conversation_ClousStorageInfo_Description2: String { return self._s[4499]! } - public var SharedMedia_CategoryDocs: String { return self._s[4500]! } - public var Appearance_RemoveThemeConfirmation: String { return self._s[4501]! } - public var Paint_Framed: String { return self._s[4502]! } - public var Channel_EditAdmin_PermissionAddAdmins: String { return self._s[4503]! } - public var Passport_Identity_DoesNotExpire: String { return self._s[4504]! } - public var Channel_SignMessages: String { return self._s[4505]! } - public var Contacts_AccessDeniedHelpON: String { return self._s[4506]! } - public var Conversation_ContextMenuStickerPackInfo: String { return self._s[4507]! } + public var GroupPermission_NoSendMedia: String { return self._s[4499]! } + public var Conversation_ClousStorageInfo_Description2: String { return self._s[4500]! } + public var SharedMedia_CategoryDocs: String { return self._s[4501]! } + public var Appearance_RemoveThemeConfirmation: String { return self._s[4502]! } + public var Paint_Framed: String { return self._s[4503]! } + public var Channel_EditAdmin_PermissionAddAdmins: String { return self._s[4504]! } + public var Passport_Identity_DoesNotExpire: String { return self._s[4505]! } + public var Channel_SignMessages: String { return self._s[4506]! } + public var Contacts_AccessDeniedHelpON: String { return self._s[4507]! } + public var Conversation_ContextMenuStickerPackInfo: String { return self._s[4508]! } public func PUSH_CHAT_LEFT(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4508]!, self._r[4508]!, [_1, _2]) + return formatWithArgumentRanges(self._s[4509]!, self._r[4509]!, [_1, _2]) } - public var GroupInfo_UpgradeButton: String { return self._s[4509]! } - public var Channel_EditAdmin_PermissionInviteMembers: String { return self._s[4510]! } - public var AutoDownloadSettings_Files: String { return self._s[4511]! } + public var GroupInfo_UpgradeButton: String { return self._s[4510]! } + public var Channel_EditAdmin_PermissionInviteMembers: String { return self._s[4511]! } + public var AutoDownloadSettings_Files: String { return self._s[4512]! } public func Notification_ChangedGroupName(_ _0: String, _ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4512]!, self._r[4512]!, [_0, _1]) + return formatWithArgumentRanges(self._s[4513]!, self._r[4513]!, [_0, _1]) } - public var Login_SendCodeViaSms: String { return self._s[4514]! } - public var Update_UpdateApp: String { return self._s[4515]! } - public var Channel_Setup_TypePublic: String { return self._s[4516]! } - public var Watch_Compose_CreateMessage: String { return self._s[4517]! } + public var Login_SendCodeViaSms: String { return self._s[4515]! } + public var Update_UpdateApp: String { return self._s[4516]! } + public var Channel_Setup_TypePublic: String { return self._s[4517]! } + public var Watch_Compose_CreateMessage: String { return self._s[4518]! } public func PUSH_CHAT_MESSAGE_VIDEOS(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4518]!, self._r[4518]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[4519]!, self._r[4519]!, [_1, _2, _3]) } - public var StickerPacksSettings_ManagingHelp: String { return self._s[4519]! } + public var StickerPacksSettings_ManagingHelp: String { return self._s[4520]! } public func Wallet_Time_PreciseDate_m12(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4520]!, self._r[4520]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[4521]!, self._r[4521]!, [_1, _2, _3]) } - public var VoiceOver_Chat_Video: String { return self._s[4521]! } - public var Forward_ChannelReadOnly: String { return self._s[4522]! } - public var StickerPack_HideStickers: String { return self._s[4523]! } - public var ChatListFolder_NameContacts: String { return self._s[4524]! } - public var Profile_BotInfo: String { return self._s[4525]! } - public var Document_TargetConfirmationFormat: String { return self._s[4526]! } - public var GroupInfo_InviteByLink: String { return self._s[4527]! } - public var Channel_AdminLog_BanSendStickersAndGifs: String { return self._s[4528]! } - public var Watch_Stickers_RecentPlaceholder: String { return self._s[4529]! } - public var Broadcast_AdminLog_EmptyText: String { return self._s[4530]! } - public var Passport_NotLoggedInMessage: String { return self._s[4531]! } - public var Conversation_StopQuizConfirmation: String { return self._s[4532]! } - public var Checkout_PaymentMethod: String { return self._s[4533]! } - public var ChatList_ArchivedChatsTitle: String { return self._s[4537]! } - public var TwoStepAuth_SetupPasswordConfirmFailed: String { return self._s[4538]! } - public var VoiceOver_Chat_RecordPreviewVoiceMessage: String { return self._s[4539]! } - public var PrivacyLastSeenSettings_GroupsAndChannelsHelp: String { return self._s[4540]! } - public var SettingsSearch_Synonyms_Privacy_Data_ContactsReset: String { return self._s[4541]! } - public var Camera_Title: String { return self._s[4542]! } - public var Map_Directions: String { return self._s[4543]! } - public var Wallet_Intro_ImportExisting: String { return self._s[4544]! } - public var Stats_MessagePublicForwardsTitle: String { return self._s[4545]! } - public var Privacy_ProfilePhoto_WhoCanSeeMyPhoto: String { return self._s[4547]! } - public var Profile_EncryptionKey: String { return self._s[4548]! } + public var VoiceOver_Chat_Video: String { return self._s[4522]! } + public var Forward_ChannelReadOnly: String { return self._s[4523]! } + public var StickerPack_HideStickers: String { return self._s[4524]! } + public var ChatListFolder_NameContacts: String { return self._s[4525]! } + public var Profile_BotInfo: String { return self._s[4526]! } + public var Document_TargetConfirmationFormat: String { return self._s[4527]! } + public var GroupInfo_InviteByLink: String { return self._s[4528]! } + public var Channel_AdminLog_BanSendStickersAndGifs: String { return self._s[4529]! } + public var Watch_Stickers_RecentPlaceholder: String { return self._s[4530]! } + public var Broadcast_AdminLog_EmptyText: String { return self._s[4531]! } + public var Passport_NotLoggedInMessage: String { return self._s[4532]! } + public var Conversation_StopQuizConfirmation: String { return self._s[4533]! } + public var Checkout_PaymentMethod: String { return self._s[4534]! } + public var ChatList_ArchivedChatsTitle: String { return self._s[4538]! } + public var TwoStepAuth_SetupPasswordConfirmFailed: String { return self._s[4539]! } + public var VoiceOver_Chat_RecordPreviewVoiceMessage: String { return self._s[4540]! } + public var PrivacyLastSeenSettings_GroupsAndChannelsHelp: String { return self._s[4541]! } + public var SettingsSearch_Synonyms_Privacy_Data_ContactsReset: String { return self._s[4542]! } + public var Camera_Title: String { return self._s[4543]! } + public var Map_Directions: String { return self._s[4544]! } + public var Wallet_Intro_ImportExisting: String { return self._s[4545]! } + public var Stats_MessagePublicForwardsTitle: String { return self._s[4546]! } + public var Privacy_ProfilePhoto_WhoCanSeeMyPhoto: String { return self._s[4548]! } + public var Profile_EncryptionKey: String { return self._s[4549]! } public func LOCAL_CHAT_MESSAGE_FWDS(_ _1: String, _ _2: Int) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4549]!, self._r[4549]!, [_1, "\(_2)"]) + return formatWithArgumentRanges(self._s[4550]!, self._r[4550]!, [_1, "\(_2)"]) } public func Compatibility_SecretMediaVersionTooLow(_ _0: String, _ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4550]!, self._r[4550]!, [_0, _1]) + return formatWithArgumentRanges(self._s[4551]!, self._r[4551]!, [_0, _1]) } - public var Passport_Identity_TypePassport: String { return self._s[4551]! } - public var CreatePoll_QuizOptionsHeader: String { return self._s[4553]! } - public var Common_No: String { return self._s[4554]! } - public var Conversation_SendMessage_ScheduleMessage: String { return self._s[4555]! } - public var SettingsSearch_Synonyms_Privacy_LastSeen: String { return self._s[4556]! } - public var Settings_AboutEmpty: String { return self._s[4557]! } - public var TwoStepAuth_FloodError: String { return self._s[4559]! } - public var SettingsSearch_Synonyms_Appearance_TextSize: String { return self._s[4560]! } + public var Passport_Identity_TypePassport: String { return self._s[4552]! } + public var CreatePoll_QuizOptionsHeader: String { return self._s[4554]! } + public var Common_No: String { return self._s[4555]! } + public var Conversation_SendMessage_ScheduleMessage: String { return self._s[4556]! } + public var SettingsSearch_Synonyms_Privacy_LastSeen: String { return self._s[4557]! } + public var Settings_AboutEmpty: String { return self._s[4558]! } + public var TwoStepAuth_FloodError: String { return self._s[4560]! } + public var SettingsSearch_Synonyms_Appearance_TextSize: String { return self._s[4561]! } public func Channel_AdminLog_MessageUnkickedName(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4562]!, self._r[4562]!, [_1]) + return formatWithArgumentRanges(self._s[4563]!, self._r[4563]!, [_1]) } - public var Conversation_Edit: String { return self._s[4565]! } - public var CheckoutInfo_SaveInfo: String { return self._s[4566]! } - public var VoiceOver_Chat_AnonymousPoll: String { return self._s[4567]! } - public var Call_CameraTooltip: String { return self._s[4569]! } - public var InstantPage_FeedbackButtonShort: String { return self._s[4570]! } - public var Contacts_InviteToTelegram: String { return self._s[4571]! } - public var Wallet_WordImport_CanNotRemember: String { return self._s[4572]! } - public var Notifications_ResetAllNotifications: String { return self._s[4573]! } - public var Calls_NewCall: String { return self._s[4574]! } - public var VoiceOver_Chat_Music: String { return self._s[4577]! } - public var Channel_Members_AddAdminErrorNotAMember: String { return self._s[4578]! } - public var Channel_Edit_AboutItem: String { return self._s[4579]! } - public var Message_VideoExpired: String { return self._s[4580]! } - public var Passport_Address_TypeTemporaryRegistrationUploadScan: String { return self._s[4581]! } + public var Conversation_Edit: String { return self._s[4566]! } + public var CheckoutInfo_SaveInfo: String { return self._s[4567]! } + public var VoiceOver_Chat_AnonymousPoll: String { return self._s[4568]! } + public var Call_CameraTooltip: String { return self._s[4570]! } + public var InstantPage_FeedbackButtonShort: String { return self._s[4571]! } + public var Contacts_InviteToTelegram: String { return self._s[4572]! } + public var Wallet_WordImport_CanNotRemember: String { return self._s[4573]! } + public var Notifications_ResetAllNotifications: String { return self._s[4574]! } + public var Calls_NewCall: String { return self._s[4575]! } + public var VoiceOver_Chat_Music: String { return self._s[4578]! } + public var Channel_Members_AddAdminErrorNotAMember: String { return self._s[4579]! } + public var Channel_Edit_AboutItem: String { return self._s[4580]! } + public var Message_VideoExpired: String { return self._s[4581]! } + public var Passport_Address_TypeTemporaryRegistrationUploadScan: String { return self._s[4582]! } public func PUSH_CHAT_RETURNED(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4582]!, self._r[4582]!, [_1, _2]) + return formatWithArgumentRanges(self._s[4583]!, self._r[4583]!, [_1, _2]) } - public var NotificationsSound_Input: String { return self._s[4584]! } - public var Notifications_ClassicTones: String { return self._s[4585]! } - public var Conversation_StatusTyping: String { return self._s[4586]! } - public var Checkout_ErrorProviderAccountInvalid: String { return self._s[4587]! } - public var ChatSettings_AutoDownloadSettings_Delimeter: String { return self._s[4588]! } - public var Wallet_Month_ShortSeptember: String { return self._s[4589]! } - public var SettingsSearch_Synonyms_Notifications_BadgeIncludeMutedChats: String { return self._s[4590]! } - public var Conversation_MessageLeaveComment: String { return self._s[4591]! } - public var UserInfo_TapToCall: String { return self._s[4592]! } - public var EnterPasscode_EnterNewPasscodeNew: String { return self._s[4593]! } - public var Conversation_ClearAll: String { return self._s[4595]! } - public var UserInfo_NotificationsDefault: String { return self._s[4596]! } - public var Wallet_Send_OwnAddressAlertText: String { return self._s[4597]! } - public var Location_ProximityGroupTip: String { return self._s[4598]! } - public var Map_ChooseAPlace: String { return self._s[4599]! } + public var NotificationsSound_Input: String { return self._s[4585]! } + public var Notifications_ClassicTones: String { return self._s[4586]! } + public var Conversation_StatusTyping: String { return self._s[4587]! } + public var Checkout_ErrorProviderAccountInvalid: String { return self._s[4588]! } + public var ChatSettings_AutoDownloadSettings_Delimeter: String { return self._s[4589]! } + public var Wallet_Month_ShortSeptember: String { return self._s[4590]! } + public var SettingsSearch_Synonyms_Notifications_BadgeIncludeMutedChats: String { return self._s[4591]! } + public var Conversation_MessageLeaveComment: String { return self._s[4592]! } + public var UserInfo_TapToCall: String { return self._s[4593]! } + public var EnterPasscode_EnterNewPasscodeNew: String { return self._s[4594]! } + public var Conversation_ClearAll: String { return self._s[4596]! } + public var UserInfo_NotificationsDefault: String { return self._s[4597]! } + public var Wallet_Send_OwnAddressAlertText: String { return self._s[4598]! } + public var Location_ProximityGroupTip: String { return self._s[4599]! } + public var Map_ChooseAPlace: String { return self._s[4600]! } public func Wallet_Receive_ShareInvoiceUrlInfo(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4600]!, self._r[4600]!, [_0]) + return formatWithArgumentRanges(self._s[4601]!, self._r[4601]!, [_0]) } - public var GroupInfo_AddParticipantTitle: String { return self._s[4601]! } - public var ChatList_PeerTypeNonContact: String { return self._s[4602]! } - public var Conversation_SlideToCancel: String { return self._s[4603]! } - public var Month_ShortJuly: String { return self._s[4604]! } - public var SocksProxySetup_ProxyType: String { return self._s[4605]! } + public var GroupInfo_AddParticipantTitle: String { return self._s[4602]! } + public var ChatList_PeerTypeNonContact: String { return self._s[4603]! } + public var Conversation_SlideToCancel: String { return self._s[4604]! } + public var Month_ShortJuly: String { return self._s[4605]! } + public var SocksProxySetup_ProxyType: String { return self._s[4606]! } public func ChatList_DeleteChatConfirmation(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4606]!, self._r[4606]!, [_0]) + return formatWithArgumentRanges(self._s[4607]!, self._r[4607]!, [_0]) } - public var ChatList_EditFolders: String { return self._s[4607]! } - public var TwoStepAuth_SetPasswordHelp: String { return self._s[4608]! } - public var Wallet_Send_ConfirmationConfirm: String { return self._s[4610]! } - public var Wallet_Created_ExportErrorTitle: String { return self._s[4611]! } + public var ChatList_EditFolders: String { return self._s[4608]! } + public var TwoStepAuth_SetPasswordHelp: String { return self._s[4609]! } + public var Wallet_Send_ConfirmationConfirm: String { return self._s[4611]! } + public var Wallet_Created_ExportErrorTitle: String { return self._s[4612]! } public func GroupPermission_ApplyAlertText(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[4612]!, self._r[4612]!, [_0]) + return formatWithArgumentRanges(self._s[4613]!, self._r[4613]!, [_0]) } - public var Permissions_PeopleNearbyTitle_v0: String { return self._s[4613]! } - public var ScheduledMessages_RemindersTitle: String { return self._s[4614]! } - public var Your_cards_expiration_year_is_invalid: String { return self._s[4615]! } - public var Wallet_Info_TransactionPendingHeader: String { return self._s[4617]! } - public var UserInfo_ShareMyContactInfo: String { return self._s[4618]! } - public var Passport_DeleteAddress: String { return self._s[4620]! } - public var Passport_DeletePassportConfirmation: String { return self._s[4621]! } - public var Passport_Identity_ReverseSide: String { return self._s[4622]! } - public var CheckoutInfo_ErrorEmailInvalid: String { return self._s[4623]! } - public var Login_InfoLastNamePlaceholder: String { return self._s[4624]! } - public var Passport_FieldAddress: String { return self._s[4625]! } - public var SettingsSearch_Synonyms_Calls_Title: String { return self._s[4626]! } - public var Passport_Identity_ResidenceCountryPlaceholder: String { return self._s[4628]! } - public var Map_Home: String { return self._s[4630]! } - public var PollResults_Title: String { return self._s[4631]! } - public var ArchivedChats_IntroText2: String { return self._s[4633]! } - public var PasscodeSettings_SimplePasscodeHelp: String { return self._s[4634]! } - public var VoiceOver_Chat_ContactPhoneNumber: String { return self._s[4635]! } - public var CallFeedback_ReasonSilentRemote: String { return self._s[4637]! } - public var Passport_Identity_AddPersonalDetails: String { return self._s[4639]! } - public var Group_Info_AdminLog: String { return self._s[4641]! } - public var ChatSettings_AutoPlayTitle: String { return self._s[4642]! } - public var Appearance_Animations: String { return self._s[4643]! } - public var Appearance_TextSizeSetting: String { return self._s[4644]! } - public func StickerPack_RemoveMaskCount(_ value: Int32) -> String { + public var Permissions_PeopleNearbyTitle_v0: String { return self._s[4614]! } + public var ScheduledMessages_RemindersTitle: String { return self._s[4615]! } + public var Your_cards_expiration_year_is_invalid: String { return self._s[4616]! } + public var Wallet_Info_TransactionPendingHeader: String { return self._s[4618]! } + public var UserInfo_ShareMyContactInfo: String { return self._s[4619]! } + public var Passport_DeleteAddress: String { return self._s[4621]! } + public var Passport_DeletePassportConfirmation: String { return self._s[4622]! } + public var Passport_Identity_ReverseSide: String { return self._s[4623]! } + public var CheckoutInfo_ErrorEmailInvalid: String { return self._s[4624]! } + public var Login_InfoLastNamePlaceholder: String { return self._s[4625]! } + public var Passport_FieldAddress: String { return self._s[4626]! } + public var SettingsSearch_Synonyms_Calls_Title: String { return self._s[4627]! } + public var Passport_Identity_ResidenceCountryPlaceholder: String { return self._s[4629]! } + public var Map_Home: String { return self._s[4631]! } + public var PollResults_Title: String { return self._s[4632]! } + public var ArchivedChats_IntroText2: String { return self._s[4634]! } + public var PasscodeSettings_SimplePasscodeHelp: String { return self._s[4635]! } + public var VoiceOver_Chat_ContactPhoneNumber: String { return self._s[4636]! } + public var CallFeedback_ReasonSilentRemote: String { return self._s[4638]! } + public var Passport_Identity_AddPersonalDetails: String { return self._s[4640]! } + public var Group_Info_AdminLog: String { return self._s[4642]! } + public var ChatSettings_AutoPlayTitle: String { return self._s[4643]! } + public var Appearance_Animations: String { return self._s[4644]! } + public var Appearance_TextSizeSetting: String { return self._s[4645]! } + public func StickerPack_AddMaskCount(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[0 * 6 + Int(form.rawValue)]!, stringValue) } - public func ForwardedVideos(_ value: Int32) -> String { + public func ChatListFilter_ShowMoreChats(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[1 * 6 + Int(form.rawValue)]!, stringValue) } - public func MuteFor_Days(_ value: Int32) -> String { + public func AttachmentMenu_SendGif(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[2 * 6 + Int(form.rawValue)]!, stringValue) } - public func Call_Minutes(_ value: Int32) -> String { + public func Conversation_LiveLocationMembersCount(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[3 * 6 + Int(form.rawValue)]!, stringValue) } - public func Watch_LastSeen_MinutesAgo(_ value: Int32) -> String { + public func AttachmentMenu_SendPhoto(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[4 * 6 + Int(form.rawValue)]!, stringValue) } - public func Media_ShareVideo(_ value: Int32) -> String { + public func VoiceOver_Chat_ContactPhoneNumberCount(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[5 * 6 + Int(form.rawValue)]!, stringValue) } - public func AttachmentMenu_SendPhoto(_ value: Int32) -> String { + public func ForwardedMessages(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[6 * 6 + Int(form.rawValue)]!, stringValue) } - public func Stats_GroupTopInviterInvites(_ value: Int32) -> String { + public func ForwardedStickers(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[7 * 6 + Int(form.rawValue)]!, stringValue) } - public func StickerPack_RemoveStickerCount(_ value: Int32) -> String { + public func DialogList_LiveLocationChatsCount(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[8 * 6 + Int(form.rawValue)]!, stringValue) } - public func PUSH_CHAT_MESSAGE_VIDEOS(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String { + public func PUSH_MESSAGE_ROUNDS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { let form = getPluralizationForm(self.lc, selector) - return String(format: self._ps[9 * 6 + Int(form.rawValue)]!, _2, _1, _3) - } - public func StickerPack_AddMaskCount(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[10 * 6 + Int(form.rawValue)]!, stringValue) - } - public func MessageTimer_ShortDays(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[11 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Conversation_TitleReplies(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[12 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Contacts_ImportersCount(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[13 * 6 + Int(form.rawValue)]!, stringValue) - } - public func ForwardedAuthorsOthers(_ selector: Int32, _ _0: String, _ _1: String) -> String { - let form = getPluralizationForm(self.lc, selector) - return String(format: self._ps[14 * 6 + Int(form.rawValue)]!, _0, _1) - } - public func Passport_Scans(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[15 * 6 + Int(form.rawValue)]!, stringValue) - } - public func OldChannels_InactiveWeek(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[16 * 6 + Int(form.rawValue)]!, stringValue) - } - public func ChatList_SelectedChats(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[17 * 6 + Int(form.rawValue)]!, stringValue) - } - public func PUSH_CHANNEL_MESSAGE_ROUNDS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { - let form = getPluralizationForm(self.lc, selector) - return String(format: self._ps[18 * 6 + Int(form.rawValue)]!, _1, _2) - } - public func CreatePoll_AddMoreOptions(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[19 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Conversation_StatusMembers(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[20 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Stats_GroupTopPosterMessages(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[21 * 6 + Int(form.rawValue)]!, stringValue) - } - public func ForwardedAudios(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[22 * 6 + Int(form.rawValue)]!, stringValue) - } - public func PUSH_CHANNEL_MESSAGE_FWDS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { - let form = getPluralizationForm(self.lc, selector) - return String(format: self._ps[23 * 6 + Int(form.rawValue)]!, _1, _2) - } - public func ForwardedPhotos(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[24 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Conversation_LiveLocationMembersCount(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[25 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Wallet_Updated_MinutesAgo(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[26 * 6 + Int(form.rawValue)]!, stringValue) - } - public func ForwardedGifs(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[27 * 6 + Int(form.rawValue)]!, stringValue) - } - public func MuteExpires_Days(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[28 * 6 + Int(form.rawValue)]!, stringValue) - } - public func ForwardedStickers(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[29 * 6 + Int(form.rawValue)]!, stringValue) - } - public func ForwardedMessages(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[30 * 6 + Int(form.rawValue)]!, stringValue) - } - public func MessageTimer_Weeks(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[31 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Media_ShareItem(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[32 * 6 + Int(form.rawValue)]!, stringValue) - } - public func OldChannels_GroupFormat(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[33 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Stats_MessageForwards(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[34 * 6 + Int(form.rawValue)]!, stringValue) - } - public func ForwardedFiles(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[35 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Conversation_ContextMenuSelectAll(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[36 * 6 + Int(form.rawValue)]!, stringValue) - } - public func PeopleNearby_ShowMorePeople(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[37 * 6 + Int(form.rawValue)]!, stringValue) - } - public func PUSH_CHAT_MESSAGE_FWDS(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String { - let form = getPluralizationForm(self.lc, selector) - return String(format: self._ps[38 * 6 + Int(form.rawValue)]!, _2, _1, _3) - } - public func Notifications_ExceptionMuteExpires_Days(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[39 * 6 + Int(form.rawValue)]!, stringValue) - } - public func MessagePoll_VotedCount(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[40 * 6 + Int(form.rawValue)]!, stringValue) - } - public func SharedMedia_Photo(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[41 * 6 + Int(form.rawValue)]!, stringValue) - } - public func ServiceMessage_GameScoreExtended(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[42 * 6 + Int(form.rawValue)]!, stringValue) - } - public func AttachmentMenu_SendVideo(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[43 * 6 + Int(form.rawValue)]!, stringValue) - } - public func ServiceMessage_GameScoreSelfExtended(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[44 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Chat_DeleteMessagesConfirmation(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[45 * 6 + Int(form.rawValue)]!, stringValue) - } - public func StickerPack_AddStickerCount(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[46 * 6 + Int(form.rawValue)]!, stringValue) - } - public func ChatList_DeletedChats(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[47 * 6 + Int(form.rawValue)]!, stringValue) - } - public func PUSH_CHAT_MESSAGE_ROUNDS(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String { - let form = getPluralizationForm(self.lc, selector) - return String(format: self._ps[48 * 6 + Int(form.rawValue)]!, _2, _1, _3) - } - public func SharedMedia_File(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[49 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Notifications_Exceptions(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[50 * 6 + Int(form.rawValue)]!, stringValue) - } - public func OldChannels_InactiveYear(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[51 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Chat_MessagesUnpinned(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[52 * 6 + Int(form.rawValue)]!, stringValue) - } - public func PasscodeSettings_FailedAttempts(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[53 * 6 + Int(form.rawValue)]!, stringValue) - } - public func ForwardedPolls(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[54 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Media_SharePhoto(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[55 * 6 + Int(form.rawValue)]!, stringValue) - } - public func LiveLocation_MenuChatsCount(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[56 * 6 + Int(form.rawValue)]!, stringValue) - } - public func PUSH_CHANNEL_MESSAGE_VIDEOS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { - let form = getPluralizationForm(self.lc, selector) - return String(format: self._ps[57 * 6 + Int(form.rawValue)]!, _1, _2) - } - public func Stats_GroupTopAdminKicks(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[58 * 6 + Int(form.rawValue)]!, stringValue) - } - public func PollResults_ShowMore(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[59 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Map_ETAMinutes(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[60 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Notification_GameScoreSimple(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[61 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Conversation_ContextViewReplies(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[62 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Invitation_Members(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[63 * 6 + Int(form.rawValue)]!, stringValue) - } - public func MessageTimer_ShortMinutes(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[64 * 6 + Int(form.rawValue)]!, stringValue) - } - public func PUSH_MESSAGE_DOCS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { - let form = getPluralizationForm(self.lc, selector) - return String(format: self._ps[65 * 6 + Int(form.rawValue)]!, _1, _2) - } - public func Call_ShortMinutes(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[66 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Stats_GroupTopPosterChars(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[67 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Stats_GroupShowMoreTopInviters(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[68 * 6 + Int(form.rawValue)]!, stringValue) - } - public func MessageTimer_ShortHours(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[69 * 6 + Int(form.rawValue)]!, stringValue) - } - public func PUSH_MESSAGE_PHOTOS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { - let form = getPluralizationForm(self.lc, selector) - return String(format: self._ps[70 * 6 + Int(form.rawValue)]!, _1, _2) - } - public func MessageTimer_Seconds(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[71 * 6 + Int(form.rawValue)]!, stringValue) - } - public func DialogList_LiveLocationChatsCount(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[72 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Chat_TitlePinnedMessages(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[73 * 6 + Int(form.rawValue)]!, stringValue) - } - public func ForwardedLocations(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[74 * 6 + Int(form.rawValue)]!, stringValue) - } - public func GroupInfo_ParticipantCount(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[75 * 6 + Int(form.rawValue)]!, stringValue) - } - public func PUSH_MESSAGE_FWDS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { - let form = getPluralizationForm(self.lc, selector) - return String(format: self._ps[76 * 6 + Int(form.rawValue)]!, _1, _2) - } - public func MessageTimer_Days(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[77 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Notification_GameScoreSelfSimple(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[78 * 6 + Int(form.rawValue)]!, stringValue) - } - public func VoiceOver_Chat_ContactEmailCount(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[79 * 6 + Int(form.rawValue)]!, stringValue) - } - public func SharedMedia_Video(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[80 * 6 + Int(form.rawValue)]!, stringValue) - } - public func VoiceOver_Chat_ContactPhoneNumberCount(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[81 * 6 + Int(form.rawValue)]!, stringValue) - } - public func ChatList_MessagePhotos(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[82 * 6 + Int(form.rawValue)]!, stringValue) - } - public func MessageTimer_Years(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[83 * 6 + Int(form.rawValue)]!, stringValue) - } - public func PUSH_MESSAGE_VIDEOS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { - let form = getPluralizationForm(self.lc, selector) - return String(format: self._ps[84 * 6 + Int(form.rawValue)]!, _1, _2) - } - public func AttachmentMenu_SendGif(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[85 * 6 + Int(form.rawValue)]!, stringValue) + return String(format: self._ps[9 * 6 + Int(form.rawValue)]!, _1, _2) } public func Conversation_TitleComments(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[86 * 6 + Int(form.rawValue)]!, stringValue) + return String(format: self._ps[10 * 6 + Int(form.rawValue)]!, stringValue) } - public func MessageTimer_Hours(_ value: Int32) -> String { + public func Contacts_InviteContacts(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[87 * 6 + Int(form.rawValue)]!, stringValue) + return String(format: self._ps[11 * 6 + Int(form.rawValue)]!, stringValue) } - public func Notification_GameScoreExtended(_ value: Int32) -> String { + public func GroupInfo_ShowMoreMembers(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[88 * 6 + Int(form.rawValue)]!, stringValue) + return String(format: self._ps[12 * 6 + Int(form.rawValue)]!, stringValue) } - public func MessagePoll_QuizCount(_ value: Int32) -> String { + public func Stats_GroupShowMoreTopInviters(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[89 * 6 + Int(form.rawValue)]!, stringValue) + return String(format: self._ps[13 * 6 + Int(form.rawValue)]!, stringValue) } - public func Theme_UsersCount(_ value: Int32) -> String { + public func ForwardedVideoMessages(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[90 * 6 + Int(form.rawValue)]!, stringValue) + return String(format: self._ps[14 * 6 + Int(form.rawValue)]!, stringValue) } - public func ChatListFilter_ShowMoreChats(_ value: Int32) -> String { + public func Conversation_StatusMembers(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[91 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Call_ShortSeconds(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[92 * 6 + Int(form.rawValue)]!, stringValue) - } - public func LastSeen_MinutesAgo(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[93 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Conversation_SelectedMessages(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[94 * 6 + Int(form.rawValue)]!, stringValue) - } - public func OldChannels_InactiveMonth(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[95 * 6 + Int(form.rawValue)]!, stringValue) - } - public func MessageTimer_Minutes(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[96 * 6 + Int(form.rawValue)]!, stringValue) - } - public func ChatList_MessageVideos(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[97 * 6 + Int(form.rawValue)]!, stringValue) - } - public func PUSH_CHANNEL_MESSAGE_DOCS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { - let form = getPluralizationForm(self.lc, selector) - return String(format: self._ps[98 * 6 + Int(form.rawValue)]!, _1, _2) - } - public func Map_ETAHours(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[99 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Conversation_StatusOnline(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[100 * 6 + Int(form.rawValue)]!, stringValue) - } - public func VoiceOver_Chat_PollOptionCount(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[101 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Stats_GroupShowMoreTopAdmins(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[102 * 6 + Int(form.rawValue)]!, stringValue) - } - public func LiveLocationUpdated_MinutesAgo(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[103 * 6 + Int(form.rawValue)]!, stringValue) - } - public func UserCount(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[104 * 6 + Int(form.rawValue)]!, stringValue) - } - public func InviteText_ContactsCountText(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[105 * 6 + Int(form.rawValue)]!, stringValue) + return String(format: self._ps[15 * 6 + Int(form.rawValue)]!, stringValue) } public func Notifications_ExceptionMuteExpires_Hours(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[106 * 6 + Int(form.rawValue)]!, stringValue) + return String(format: self._ps[16 * 6 + Int(form.rawValue)]!, stringValue) + } + public func PUSH_CHAT_MESSAGE_ROUNDS(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String { + let form = getPluralizationForm(self.lc, selector) + return String(format: self._ps[17 * 6 + Int(form.rawValue)]!, _2, _1, _3) } public func Stats_MessageViews(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[107 * 6 + Int(form.rawValue)]!, stringValue) + return String(format: self._ps[18 * 6 + Int(form.rawValue)]!, stringValue) + } + public func ChatList_SelectedChats(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[19 * 6 + Int(form.rawValue)]!, stringValue) + } + public func PUSH_MESSAGE_PHOTOS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { + let form = getPluralizationForm(self.lc, selector) + return String(format: self._ps[20 * 6 + Int(form.rawValue)]!, _1, _2) + } + public func VoiceOver_Chat_PollOptionCount(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[21 * 6 + Int(form.rawValue)]!, stringValue) + } + public func ForwardedPhotos(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[22 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Media_ShareVideo(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[23 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Notifications_ExceptionMuteExpires_Minutes(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[24 * 6 + Int(form.rawValue)]!, stringValue) + } + public func SharedMedia_DeleteItemsConfirmation(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[25 * 6 + Int(form.rawValue)]!, stringValue) + } + public func SharedMedia_Generic(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[26 * 6 + Int(form.rawValue)]!, stringValue) + } + public func ForwardedAudios(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[27 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Stats_GroupTopInviterInvites(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[28 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Conversation_StatusSubscribers(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[29 * 6 + Int(form.rawValue)]!, stringValue) + } + public func ForwardedPolls(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[30 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Chat_DeleteMessagesConfirmation(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[31 * 6 + Int(form.rawValue)]!, stringValue) + } + public func MessageTimer_Years(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[32 * 6 + Int(form.rawValue)]!, stringValue) + } + public func MessageTimer_Seconds(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[33 * 6 + Int(form.rawValue)]!, stringValue) + } + public func StickerPack_StickerCount(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[34 * 6 + Int(form.rawValue)]!, stringValue) + } + public func InviteText_ContactsCountText(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[35 * 6 + Int(form.rawValue)]!, stringValue) + } + public func MessageTimer_ShortWeeks(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[36 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Notification_GameScoreSelfExtended(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[37 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Chat_MessagesUnpinned(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[38 * 6 + Int(form.rawValue)]!, stringValue) + } + public func MessageTimer_ShortDays(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[39 * 6 + Int(form.rawValue)]!, stringValue) + } + public func PUSH_CHAT_MESSAGE_FWDS(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String { + let form = getPluralizationForm(self.lc, selector) + return String(format: self._ps[40 * 6 + Int(form.rawValue)]!, _2, _1, _3) + } + public func AttachmentMenu_SendVideo(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[41 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Chat_TitlePinnedMessages(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[42 * 6 + Int(form.rawValue)]!, stringValue) + } + public func PUSH_CHANNEL_MESSAGE_ROUNDS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { + let form = getPluralizationForm(self.lc, selector) + return String(format: self._ps[43 * 6 + Int(form.rawValue)]!, _1, _2) + } + public func MessageTimer_Hours(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[44 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Conversation_StatusOnline(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[45 * 6 + Int(form.rawValue)]!, stringValue) + } + public func StickerPack_RemoveStickerCount(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[46 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Conversation_TitleReplies(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[47 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Stats_GroupTopAdminKicks(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[48 * 6 + Int(form.rawValue)]!, stringValue) + } + public func ChatList_DeleteConfirmation(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[49 * 6 + Int(form.rawValue)]!, stringValue) + } + public func ChatList_MessageFiles(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[50 * 6 + Int(form.rawValue)]!, stringValue) + } + public func ChatList_MessageVideos(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[51 * 6 + Int(form.rawValue)]!, stringValue) + } + public func PasscodeSettings_FailedAttempts(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[52 * 6 + Int(form.rawValue)]!, stringValue) + } + public func ForwardedLocations(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[53 * 6 + Int(form.rawValue)]!, stringValue) + } + public func SharedMedia_Photo(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[54 * 6 + Int(form.rawValue)]!, stringValue) + } + public func MuteExpires_Days(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[55 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Call_Seconds(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[56 * 6 + Int(form.rawValue)]!, stringValue) + } + public func InstantPage_Views(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[57 * 6 + Int(form.rawValue)]!, stringValue) + } + public func PUSH_MESSAGE_DOCS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { + let form = getPluralizationForm(self.lc, selector) + return String(format: self._ps[58 * 6 + Int(form.rawValue)]!, _1, _2) + } + public func LiveLocationUpdated_MinutesAgo(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[59 * 6 + Int(form.rawValue)]!, stringValue) + } + public func MuteFor_Hours(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[60 * 6 + Int(form.rawValue)]!, stringValue) + } + public func StickerPack_AddStickerCount(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[61 * 6 + Int(form.rawValue)]!, stringValue) + } + public func MessageTimer_Days(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[62 * 6 + Int(form.rawValue)]!, stringValue) + } + public func OldChannels_InactiveYear(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[63 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Watch_LastSeen_HoursAgo(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[64 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Theme_UsersCount(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[65 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Stats_GroupTopPosterMessages(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[66 * 6 + Int(form.rawValue)]!, stringValue) + } + public func QuickSend_Photos(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[67 * 6 + Int(form.rawValue)]!, stringValue) + } + public func VoiceOver_Chat_ContactEmailCount(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[68 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Watch_LastSeen_MinutesAgo(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[69 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Conversation_MessageViewComments(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[70 * 6 + Int(form.rawValue)]!, stringValue) + } + public func ForwardedVideos(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[71 * 6 + Int(form.rawValue)]!, stringValue) + } + public func PUSH_MESSAGES(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { + let form = getPluralizationForm(self.lc, selector) + return String(format: self._ps[72 * 6 + Int(form.rawValue)]!, _1, _2) + } + public func MessagePoll_QuizCount(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[73 * 6 + Int(form.rawValue)]!, stringValue) + } + public func ForwardedContacts(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[74 * 6 + Int(form.rawValue)]!, stringValue) + } + public func PUSH_MESSAGE_FWDS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { + let form = getPluralizationForm(self.lc, selector) + return String(format: self._ps[75 * 6 + Int(form.rawValue)]!, _1, _2) + } + public func Map_ETAMinutes(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[76 * 6 + Int(form.rawValue)]!, stringValue) + } + public func GroupInfo_ParticipantCount(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[77 * 6 + Int(form.rawValue)]!, stringValue) + } + public func PUSH_CHANNEL_MESSAGE_PHOTOS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { + let form = getPluralizationForm(self.lc, selector) + return String(format: self._ps[78 * 6 + Int(form.rawValue)]!, _1, _2) + } + public func MuteFor_Days(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[79 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Media_ShareItem(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[80 * 6 + Int(form.rawValue)]!, stringValue) + } + public func LiveLocation_MenuChatsCount(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[81 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Conversation_SelectedMessages(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[82 * 6 + Int(form.rawValue)]!, stringValue) + } + public func CreatePoll_AddMoreOptions(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[83 * 6 + Int(form.rawValue)]!, stringValue) + } + public func MessageTimer_Minutes(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[84 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Stats_GroupShowMoreTopPosters(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[85 * 6 + Int(form.rawValue)]!, stringValue) + } + public func SharedMedia_Video(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[86 * 6 + Int(form.rawValue)]!, stringValue) + } + public func PeopleNearby_ShowMorePeople(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[87 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Watch_UserInfo_Mute(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[88 * 6 + Int(form.rawValue)]!, stringValue) + } + public func LastSeen_MinutesAgo(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[89 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Media_SharePhoto(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[90 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Wallet_Updated_MinutesAgo(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[91 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Notification_GameScoreSelfSimple(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[92 * 6 + Int(form.rawValue)]!, stringValue) + } + public func PUSH_CHAT_MESSAGE_DOCS(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String { + let form = getPluralizationForm(self.lc, selector) + return String(format: self._ps[93 * 6 + Int(form.rawValue)]!, _2, _1, _3) + } + public func Invitation_Members(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[94 * 6 + Int(form.rawValue)]!, stringValue) + } + public func StickerPack_RemoveMaskCount(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[95 * 6 + Int(form.rawValue)]!, stringValue) + } + public func PUSH_CHAT_MESSAGE_VIDEOS(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String { + let form = getPluralizationForm(self.lc, selector) + return String(format: self._ps[96 * 6 + Int(form.rawValue)]!, _2, _1, _3) + } + public func ChatList_Search_Messages(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[97 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Call_Minutes(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[98 * 6 + Int(form.rawValue)]!, stringValue) + } + public func OldChannels_GroupFormat(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[99 * 6 + Int(form.rawValue)]!, stringValue) + } + public func ForwardedGifs(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[100 * 6 + Int(form.rawValue)]!, stringValue) + } + public func ForwardedFiles(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[101 * 6 + Int(form.rawValue)]!, stringValue) + } + public func MessageTimer_Weeks(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[102 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Wallpaper_DeleteConfirmation(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[103 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Stats_GroupTopAdminBans(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[104 * 6 + Int(form.rawValue)]!, stringValue) + } + public func ServiceMessage_GameScoreSelfSimple(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[105 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Map_ETAHours(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[106 * 6 + Int(form.rawValue)]!, stringValue) } public func PUSH_CHAT_MESSAGES(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String { let form = getPluralizationForm(self.lc, selector) - return String(format: self._ps[108 * 6 + Int(form.rawValue)]!, _2, _1, _3) + return String(format: self._ps[107 * 6 + Int(form.rawValue)]!, _2, _1, _3) } - public func Conversation_MessageViewComments(_ value: Int32) -> String { + public func MuteExpires_Hours(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[108 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Notifications_ExceptionMuteExpires_Days(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[109 * 6 + Int(form.rawValue)]!, stringValue) @@ -5679,216 +5681,215 @@ public final class PresentationStrings: Equatable { let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[110 * 6 + Int(form.rawValue)]!, stringValue) } - public func LastSeen_HoursAgo(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[111 * 6 + Int(form.rawValue)]!, stringValue) + public func PUSH_CHANNEL_MESSAGES(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { + let form = getPluralizationForm(self.lc, selector) + return String(format: self._ps[111 * 6 + Int(form.rawValue)]!, _1, _2) } - public func Forward_ConfirmMultipleFiles(_ value: Int32) -> String { + public func ChatList_MessagePhotos(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[112 * 6 + Int(form.rawValue)]!, stringValue) } - public func Conversation_StatusSubscribers(_ value: Int32) -> String { + public func Wallet_Updated_HoursAgo(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[113 * 6 + Int(form.rawValue)]!, stringValue) } - public func SharedMedia_Generic(_ value: Int32) -> String { + public func ServiceMessage_GameScoreSelfExtended(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[114 * 6 + Int(form.rawValue)]!, stringValue) } - public func MuteExpires_Hours(_ value: Int32) -> String { + public func ServiceMessage_GameScoreSimple(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[115 * 6 + Int(form.rawValue)]!, stringValue) } - public func QuickSend_Photos(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[116 * 6 + Int(form.rawValue)]!, stringValue) + public func PUSH_MESSAGE_VIDEOS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { + let form = getPluralizationForm(self.lc, selector) + return String(format: self._ps[116 * 6 + Int(form.rawValue)]!, _1, _2) } - public func Stats_GroupTopAdminBans(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[117 * 6 + Int(form.rawValue)]!, stringValue) + public func ForwardedAuthorsOthers(_ selector: Int32, _ _0: String, _ _1: String) -> String { + let form = getPluralizationForm(self.lc, selector) + return String(format: self._ps[117 * 6 + Int(form.rawValue)]!, _0, _1) } - public func SharedMedia_DeleteItemsConfirmation(_ value: Int32) -> String { + public func MessagePoll_VotedCount(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[118 * 6 + Int(form.rawValue)]!, stringValue) } - public func ChatList_DeleteConfirmation(_ value: Int32) -> String { + public func ChatList_MessageMusic(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[119 * 6 + Int(form.rawValue)]!, stringValue) } - public func MessageTimer_ShortWeeks(_ value: Int32) -> String { + public func Call_ShortSeconds(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[120 * 6 + Int(form.rawValue)]!, stringValue) } - public func Notifications_ExceptionMuteExpires_Minutes(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[121 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Wallet_Updated_HoursAgo(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[122 * 6 + Int(form.rawValue)]!, stringValue) - } - public func ForwardedContacts(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[123 * 6 + Int(form.rawValue)]!, stringValue) - } - public func ChatList_MessageMusic(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[124 * 6 + Int(form.rawValue)]!, stringValue) - } - public func ChatList_Search_Messages(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[125 * 6 + Int(form.rawValue)]!, stringValue) - } - public func PUSH_CHANNEL_MESSAGE_PHOTOS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { + public func PUSH_CHANNEL_MESSAGE_VIDEOS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { let form = getPluralizationForm(self.lc, selector) - return String(format: self._ps[126 * 6 + Int(form.rawValue)]!, _1, _2) - } - public func StickerPack_StickerCount(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[127 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Watch_UserInfo_Mute(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[128 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Wallpaper_DeleteConfirmation(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[129 * 6 + Int(form.rawValue)]!, stringValue) - } - public func PUSH_MESSAGES(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { - let form = getPluralizationForm(self.lc, selector) - return String(format: self._ps[130 * 6 + Int(form.rawValue)]!, _1, _2) - } - public func PUSH_CHANNEL_MESSAGES(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { - let form = getPluralizationForm(self.lc, selector) - return String(format: self._ps[131 * 6 + Int(form.rawValue)]!, _1, _2) - } - public func MuteExpires_Minutes(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[132 * 6 + Int(form.rawValue)]!, stringValue) - } - public func ForwardedVideoMessages(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[133 * 6 + Int(form.rawValue)]!, stringValue) - } - public func MessageTimer_ShortSeconds(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[134 * 6 + Int(form.rawValue)]!, stringValue) - } - public func OldChannels_Leave(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[135 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Call_Seconds(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[136 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Watch_LastSeen_HoursAgo(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[137 * 6 + Int(form.rawValue)]!, stringValue) - } - public func MuteFor_Hours(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[138 * 6 + Int(form.rawValue)]!, stringValue) - } - public func ServiceMessage_GameScoreSelfSimple(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[139 * 6 + Int(form.rawValue)]!, stringValue) - } - public func PrivacyLastSeenSettings_AddUsers(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[140 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Notification_GameScoreSelfExtended(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[141 * 6 + Int(form.rawValue)]!, stringValue) - } - public func SharedMedia_Link(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[142 * 6 + Int(form.rawValue)]!, stringValue) - } - public func VoiceOver_Chat_PollVotes(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[143 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Contacts_InviteContacts(_ value: Int32) -> String { - let form = getPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[144 * 6 + Int(form.rawValue)]!, stringValue) - } - public func PUSH_MESSAGE_ROUNDS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { - let form = getPluralizationForm(self.lc, selector) - return String(format: self._ps[145 * 6 + Int(form.rawValue)]!, _1, _2) + return String(format: self._ps[121 * 6 + Int(form.rawValue)]!, _1, _2) } public func Stats_GroupTopAdminDeletions(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[122 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Conversation_ContextViewReplies(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[123 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Stats_GroupShowMoreTopAdmins(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[124 * 6 + Int(form.rawValue)]!, stringValue) + } + public func PollResults_ShowMore(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[125 * 6 + Int(form.rawValue)]!, stringValue) + } + public func MessageTimer_ShortHours(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[126 * 6 + Int(form.rawValue)]!, stringValue) + } + public func SharedMedia_Link(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[127 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Notification_GameScoreExtended(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[128 * 6 + Int(form.rawValue)]!, stringValue) + } + public func MuteExpires_Minutes(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[129 * 6 + Int(form.rawValue)]!, stringValue) + } + public func ServiceMessage_GameScoreExtended(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[130 * 6 + Int(form.rawValue)]!, stringValue) + } + public func OldChannels_Leave(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[131 * 6 + Int(form.rawValue)]!, stringValue) + } + public func PUSH_CHAT_MESSAGE_PHOTOS(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String { + let form = getPluralizationForm(self.lc, selector) + return String(format: self._ps[132 * 6 + Int(form.rawValue)]!, _2, _1, _3) + } + public func Stats_MessageForwards(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[133 * 6 + Int(form.rawValue)]!, stringValue) + } + public func VoiceOver_Chat_PollVotes(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[134 * 6 + Int(form.rawValue)]!, stringValue) + } + public func PrivacyLastSeenSettings_AddUsers(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[135 * 6 + Int(form.rawValue)]!, stringValue) + } + public func MessageTimer_ShortMinutes(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[136 * 6 + Int(form.rawValue)]!, stringValue) + } + public func PUSH_CHANNEL_MESSAGE_FWDS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { + let form = getPluralizationForm(self.lc, selector) + return String(format: self._ps[137 * 6 + Int(form.rawValue)]!, _1, _2) + } + public func Notifications_Exceptions(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[138 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Contacts_ImportersCount(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[139 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Call_ShortMinutes(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[140 * 6 + Int(form.rawValue)]!, stringValue) + } + public func UserCount(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[141 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Forward_ConfirmMultipleFiles(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[142 * 6 + Int(form.rawValue)]!, stringValue) + } + public func LastSeen_HoursAgo(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[143 * 6 + Int(form.rawValue)]!, stringValue) + } + public func OldChannels_InactiveWeek(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[144 * 6 + Int(form.rawValue)]!, stringValue) + } + public func OldChannels_InactiveMonth(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[145 * 6 + Int(form.rawValue)]!, stringValue) + } + public func MessageTimer_ShortSeconds(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[146 * 6 + Int(form.rawValue)]!, stringValue) } - public func Stats_GroupShowMoreTopPosters(_ value: Int32) -> String { + public func Conversation_ContextMenuSelectAll(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[147 * 6 + Int(form.rawValue)]!, stringValue) } - public func PUSH_CHAT_MESSAGE_DOCS(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String { - let form = getPluralizationForm(self.lc, selector) - return String(format: self._ps[148 * 6 + Int(form.rawValue)]!, _2, _1, _3) + public func Notification_GameScoreSimple(_ value: Int32) -> String { + let form = getPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[148 * 6 + Int(form.rawValue)]!, stringValue) } - public func GroupInfo_ShowMoreMembers(_ value: Int32) -> String { + public func AttachmentMenu_SendItem(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[149 * 6 + Int(form.rawValue)]!, stringValue) } - public func ChatList_MessageFiles(_ value: Int32) -> String { + public func Passport_Scans(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[150 * 6 + Int(form.rawValue)]!, stringValue) } - public func PUSH_CHAT_MESSAGE_PHOTOS(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String { + public func PUSH_CHANNEL_MESSAGE_DOCS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { let form = getPluralizationForm(self.lc, selector) - return String(format: self._ps[151 * 6 + Int(form.rawValue)]!, _2, _1, _3) + return String(format: self._ps[151 * 6 + Int(form.rawValue)]!, _1, _2) } - public func ServiceMessage_GameScoreSimple(_ value: Int32) -> String { + public func ChatList_DeletedChats(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[152 * 6 + Int(form.rawValue)]!, stringValue) } - public func InstantPage_Views(_ value: Int32) -> String { + public func SharedMedia_File(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[153 * 6 + Int(form.rawValue)]!, stringValue) } - public func AttachmentMenu_SendItem(_ value: Int32) -> String { + public func Stats_GroupTopPosterChars(_ value: Int32) -> String { let form = getPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[154 * 6 + Int(form.rawValue)]!, stringValue) diff --git a/submodules/TelegramUI/Resources/PresentationStrings.mapping b/submodules/TelegramUI/Resources/PresentationStrings.mapping index 76f49807f644604590aacb01ee3de5f24b1e977c..904d069235582f647195db8919580261c74836ea 100644 GIT binary patch delta 7240 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 delta 7407 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 diff --git a/submodules/TelegramUI/Sources/DeclareEncodables.swift b/submodules/TelegramUI/Sources/DeclareEncodables.swift index c469aa47f1..2800e6a5f8 100644 --- a/submodules/TelegramUI/Sources/DeclareEncodables.swift +++ b/submodules/TelegramUI/Sources/DeclareEncodables.swift @@ -57,6 +57,7 @@ private var telegramUIDeclaredEncodables: Void = { declareEncodable(IntentsSettings.self, f: { IntentsSettings(decoder: $0) }) declareEncodable(CachedGeocode.self, f: { CachedGeocode(decoder: $0) }) declareEncodable(ChatListFilterSettings.self, f: { ChatListFilterSettings(decoder: $0) }) + declareEncodable(WidgetSettings.self, f: { WidgetSettings(decoder: $0) }) return }() diff --git a/submodules/TelegramUI/Sources/WidgetDataContext.swift b/submodules/TelegramUI/Sources/WidgetDataContext.swift index eddd306ed6..fa70a4b152 100644 --- a/submodules/TelegramUI/Sources/WidgetDataContext.swift +++ b/submodules/TelegramUI/Sources/WidgetDataContext.swift @@ -7,6 +7,7 @@ import WidgetItems import TelegramPresentationData import NotificationsPresentationData import WidgetKit +import TelegramUIPreferences final class WidgetDataContext { private var currentAccount: Account? @@ -24,7 +25,7 @@ final class WidgetDataContext { return .single(.notAuthorized) } - enum RecentPeers { + enum CombinedRecentPeers { struct Unread { var count: Int32 var isMuted: Bool @@ -34,19 +35,47 @@ final class WidgetDataContext { case peers(peers: [Peer], unread: [PeerId: Unread]) } - let recent: Signal = recentPeers(account: account) - |> mapToSignal { recent -> Signal in + let preferencesKey: PostboxViewKey = .preferences(keys: Set([ + ApplicationSpecificPreferencesKeys.widgetSettings + ])) + let sourcePeers: Signal = account.postbox.combinedView(keys: [ + preferencesKey + ]) + |> mapToSignal { views -> Signal in + let widgetSettings: WidgetSettings + if let view = views.views[preferencesKey] as? PreferencesView, let value = view.values[ApplicationSpecificPreferencesKeys.widgetSettings] as? WidgetSettings { + widgetSettings = value + } else { + widgetSettings = .default + } + + if widgetSettings.useHints { + return recentPeers(account: account) + } else { + return account.postbox.transaction { transaction -> RecentPeers in + return .peers(widgetSettings.peers.compactMap { peerId -> Peer? in + guard let peer = transaction.getPeer(peerId) else { + return nil + } + return peer + }) + } + } + } + + let recent: Signal = sourcePeers + |> mapToSignal { recent -> Signal in switch recent { case .disabled: return .single(.disabled) case let .peers(peers): - return combineLatest(queue: .mainQueue(), peers.filter { !$0.isDeleted }.map { account.postbox.peerView(id: $0.id)}) |> mapToSignal { peerViews -> Signal in + return combineLatest(queue: .mainQueue(), peers.filter { !$0.isDeleted }.map { account.postbox.peerView(id: $0.id)}) |> mapToSignal { peerViews -> Signal in return account.postbox.unreadMessageCountsView(items: peerViews.map { .peer($0.peerId) }) - |> map { values -> RecentPeers in + |> map { values -> CombinedRecentPeers in var peers: [Peer] = [] - var unread: [PeerId: RecentPeers.Unread] = [:] + var unread: [PeerId: CombinedRecentPeers.Unread] = [:] for peerView in peerViews { if let peer = peerViewMainPeer(peerView) { var isMuted: Bool = false @@ -61,7 +90,7 @@ final class WidgetDataContext { let unreadCount = values.count(for: .peer(peerView.peerId)) if let unreadCount = unreadCount, unreadCount > 0 { - unread[peerView.peerId] = RecentPeers.Unread(count: Int32(unreadCount), isMuted: isMuted) + unread[peerView.peerId] = CombinedRecentPeers.Unread(count: Int32(unreadCount), isMuted: isMuted) } peers.append(peer) @@ -80,20 +109,20 @@ final class WidgetDataContext { return .disabled case let .peers(peers, unread): return .peers(WidgetDataPeers(accountPeerId: account.peerId.toInt64(), peers: peers.compactMap { peer -> WidgetDataPeer? in - guard let user = peer as? TelegramUser else { - return nil - } - var name: String = "" var lastName: String? - if let firstName = user.firstName { - name = firstName - lastName = user.lastName - } else if let lastName = user.lastName { - name = lastName - } else if let phone = user.phone, !phone.isEmpty { - name = phone + if let user = peer as? TelegramUser { + if let firstName = user.firstName { + name = firstName + lastName = user.lastName + } else if let lastName = user.lastName { + name = lastName + } else if let phone = user.phone, !phone.isEmpty { + name = phone + } + } else { + name = peer.debugDisplayTitle } var badge: WidgetDataPeer.Badge? @@ -104,7 +133,7 @@ final class WidgetDataContext { ) } - return WidgetDataPeer(id: user.id.toInt64(), name: name, lastName: lastName, letters: user.displayLetters, avatarPath: smallestImageRepresentation(user.photo).flatMap { representation in + return WidgetDataPeer(id: peer.id.toInt64(), name: name, lastName: lastName, letters: peer.displayLetters, avatarPath: smallestImageRepresentation(peer.profileImageRepresentations).flatMap { representation in return account.postbox.mediaBox.resourcePath(representation.resource) }, badge: badge) })) diff --git a/submodules/TelegramUIPreferences/Sources/PostboxKeys.swift b/submodules/TelegramUIPreferences/Sources/PostboxKeys.swift index 17f712a5e0..9e68abb6f0 100644 --- a/submodules/TelegramUIPreferences/Sources/PostboxKeys.swift +++ b/submodules/TelegramUIPreferences/Sources/PostboxKeys.swift @@ -7,12 +7,14 @@ private enum ApplicationSpecificPreferencesKeyValues: Int32 { case voipDerivedState = 16 case chatArchiveSettings = 17 case chatListFilterSettings = 18 + case widgetSettings = 19 } public struct ApplicationSpecificPreferencesKeys { public static let voipDerivedState = applicationSpecificPreferencesKey(ApplicationSpecificPreferencesKeyValues.voipDerivedState.rawValue) public static let chatArchiveSettings = applicationSpecificPreferencesKey(ApplicationSpecificPreferencesKeyValues.chatArchiveSettings.rawValue) public static let chatListFilterSettings = applicationSpecificPreferencesKey(ApplicationSpecificPreferencesKeyValues.chatListFilterSettings.rawValue) + public static let widgetSettings = applicationSpecificPreferencesKey(ApplicationSpecificPreferencesKeyValues.widgetSettings.rawValue) } private enum ApplicationSpecificSharedDataKeyValues: Int32 { diff --git a/submodules/TelegramUIPreferences/Sources/WidgetSettings.swift b/submodules/TelegramUIPreferences/Sources/WidgetSettings.swift new file mode 100644 index 0000000000..c2965f2c42 --- /dev/null +++ b/submodules/TelegramUIPreferences/Sources/WidgetSettings.swift @@ -0,0 +1,61 @@ + +import Foundation +import Postbox +import SwiftSignalKit + +public struct WidgetSettings: PreferencesEntry, Equatable { + public var useHints: Bool + public var peers: [PeerId] + + public static var `default`: WidgetSettings { + return WidgetSettings( + useHints: true, + peers: [] + ) + } + + public init( + useHints: Bool, + peers: [PeerId] + ) { + self.useHints = useHints + self.peers = peers + } + + public init(decoder: PostboxDecoder) { + self.useHints = decoder.decodeBoolForKey("useHints", orElse: true) + self.peers = decoder.decodeInt64ArrayForKey("peers").map { PeerId($0) } + } + + public func encode(_ encoder: PostboxEncoder) { + encoder.encodeBool(self.useHints, forKey: "useHints") + encoder.encodeInt64Array(self.peers.map { $0.toInt64() }, forKey: "peers") + } + + public func isEqual(to: PreferencesEntry) -> Bool { + if let to = to as? WidgetSettings { + return self == to + } else { + return false + } + } +} + +public func updateWidgetSettingsInteractively(postbox: Postbox, _ f: @escaping (WidgetSettings) -> WidgetSettings) -> Signal { + return postbox.transaction { transaction -> Void in + updateWidgetSettingsInteractively(transaction: transaction, f) + } + |> ignoreValues +} + +public func updateWidgetSettingsInteractively(transaction: Transaction, _ f: @escaping (WidgetSettings) -> WidgetSettings) { + transaction.updatePreferencesEntry(key: ApplicationSpecificPreferencesKeys.widgetSettings, { entry in + let currentSettings: WidgetSettings + if let entry = entry as? WidgetSettings { + currentSettings = entry + } else { + currentSettings = .default + } + return f(currentSettings) + }) +} diff --git a/submodules/WidgetSetupScreen/BUILD b/submodules/WidgetSetupScreen/BUILD new file mode 100644 index 0000000000..d674747929 --- /dev/null +++ b/submodules/WidgetSetupScreen/BUILD @@ -0,0 +1,25 @@ +load("@build_bazel_rules_swift//swift:swift.bzl", "swift_library") + +swift_library( + name = "WidgetSetupScreen", + module_name = "WidgetSetupScreen", + srcs = glob([ + "Sources/**/*.swift", + ]), + deps = [ + "//submodules/Display:Display", + "//submodules/AsyncDisplayKit:AsyncDisplayKit", + "//submodules/Postbox:Postbox", + "//submodules/SyncCore:SyncCore", + "//submodules/TelegramCore:TelegramCore", + "//submodules/SSignalKit/SwiftSignalKit:SwiftSignalKit", + "//submodules/ItemListUI:ItemListUI", + "//submodules/ItemListPeerItem:ItemListPeerItem", + "//submodules/ItemListPeerActionItem:ItemListPeerActionItem", + "//submodules/PresentationDataUtils:PresentationDataUtils", + "//submodules/AccountContext:AccountContext", + ], + visibility = [ + "//visibility:public", + ], +) diff --git a/submodules/WidgetSetupScreen/Sources/WidgetSetupScreen.swift b/submodules/WidgetSetupScreen/Sources/WidgetSetupScreen.swift new file mode 100644 index 0000000000..7b00160ffa --- /dev/null +++ b/submodules/WidgetSetupScreen/Sources/WidgetSetupScreen.swift @@ -0,0 +1,453 @@ +import Foundation +import UIKit +import Display +import SwiftSignalKit +import Postbox +import TelegramCore +import SyncCore +import TelegramPresentationData +import TelegramUIPreferences +import ItemListUI +import PresentationDataUtils +import AccountContext +import ItemListPeerItem +import ItemListPeerActionItem + +private final class Arguments { + let context: AccountContext + + let updateUseHints: (Bool) -> Void + let setPeerIdWithRevealedOptions: (PeerId?, PeerId?) -> Void + let removePeer: (PeerId) -> Void + let addPeer: () -> Void + let openPeer: (PeerId) -> Void + + init(context: AccountContext, updateUseHints: @escaping (Bool) -> Void, setPeerIdWithRevealedOptions: @escaping (PeerId?, PeerId?) -> Void, removePeer: @escaping (PeerId) -> Void, addPeer: @escaping () -> Void, openPeer: @escaping (PeerId) -> Void) { + self.context = context + self.updateUseHints = updateUseHints + self.setPeerIdWithRevealedOptions = setPeerIdWithRevealedOptions + self.removePeer = removePeer + self.addPeer = addPeer + self.openPeer = openPeer + } +} + +private enum WidgetSetupScreenEntry: ItemListNodeEntry { + enum Section: Int32 { + case mode + case peers + } + + enum StableId: Hashable { + case useHints + case peersHeaderItem + case add + case peer(PeerId) + } + + case useHints(String, Bool) + case peersHeaderItem(String) + case peerItem(Int32, PresentationDateTimeFormat, PresentationPersonNameOrder, SelectivePrivacyPeer, ItemListPeerItemEditing, Bool) + case addItem(String, Bool) + + var section: ItemListSectionId { + switch self { + case .useHints: + return Section.mode.rawValue + case .peersHeaderItem, .peerItem: + return Section.peers.rawValue + case .addItem: + return Section.peers.rawValue + } + } + + var stableId: StableId { + switch self { + case .useHints: + return .useHints + case .peersHeaderItem: + return .peersHeaderItem + case let .peerItem(_, _, _, peer, _, _): + return .peer(peer.peer.id) + case .addItem: + return .add + } + } + + var sortIndex: Int32 { + switch self { + case .useHints: + return 0 + case .peersHeaderItem: + return 1 + case .addItem: + return 2 + case let .peerItem(index, _, _, _, _, _): + return 10 + index + } + } + + static func ==(lhs: WidgetSetupScreenEntry, rhs: WidgetSetupScreenEntry) -> Bool { + switch lhs { + case let .useHints(text, value): + if case .useHints(text, value) = rhs { + return true + } else { + return false + } + case let .peersHeaderItem(text): + if case .peersHeaderItem(text) = rhs { + return true + } else { + return false + } + case let .peerItem(lhsIndex, lhsDateTimeFormat, lhsNameOrder, lhsPeer, lhsEditing, lhsEnabled): + if case let .peerItem(rhsIndex, rhsDateTimeFormat, rhsNameOrder, rhsPeer, rhsEditing, rhsEnabled) = rhs { + if lhsIndex != rhsIndex { + return false + } + if lhsDateTimeFormat != rhsDateTimeFormat { + return false + } + if lhsNameOrder != rhsNameOrder { + return false + } + if lhsPeer != rhsPeer { + return false + } + if lhsEditing != rhsEditing { + return false + } + if lhsEnabled != rhsEnabled { + return false + } + return true + } else { + return false + } + case let .addItem(lhsText, lhsEditing): + if case let .addItem(rhsText, rhsEditing) = rhs, lhsText == rhsText, lhsEditing == rhsEditing { + return true + } else { + return false + } + } + } + + static func <(lhs: WidgetSetupScreenEntry, rhs: WidgetSetupScreenEntry) -> Bool { + return lhs.sortIndex < rhs.sortIndex + } + + func item(presentationData: ItemListPresentationData, arguments: Any) -> ListViewItem { + let arguments = arguments as! Arguments + switch self { + case let .useHints(text, value): + return ItemListSwitchItem(presentationData: presentationData, title: text, value: value, sectionId: self.section, style: .blocks, updated: { value in + arguments.updateUseHints(value) + }) + case let .peersHeaderItem(text): + return ItemListSectionHeaderItem(presentationData: presentationData, text: text, sectionId: self.section) + case let .peerItem(_, dateTimeFormat, nameOrder, peer, editing, enabled): + var text: ItemListPeerItemText = .none + if let group = peer.peer as? TelegramGroup { + text = .text(presentationData.strings.Conversation_StatusMembers(Int32(group.participantCount))) + } else if let channel = peer.peer as? TelegramChannel { + if let participantCount = peer.participantCount { + text = .text(presentationData.strings.Conversation_StatusMembers(Int32(participantCount))) + } else { + switch channel.info { + case .group: + text = .text(presentationData.strings.Group_Status) + case .broadcast: + text = .text(presentationData.strings.Channel_Status) + } + } + } + return ItemListPeerItem(presentationData: presentationData, dateTimeFormat: dateTimeFormat, nameDisplayOrder: nameOrder, context: arguments.context, peer: peer.peer, presence: nil, text: text, label: .none, editing: editing, switchValue: nil, enabled: enabled, selectable: true, sectionId: self.section, action: { + arguments.openPeer(peer.peer.id) + }, setPeerIdWithRevealedOptions: { previousId, id in + arguments.setPeerIdWithRevealedOptions(previousId, id) + }, removePeer: { peerId in + arguments.removePeer(peerId) + }) + case let .addItem(text, editing): + return ItemListPeerActionItem(presentationData: presentationData, icon: PresentationResourcesItemList.plusIconImage(presentationData.theme), title: text, sectionId: self.section, editing: editing, action: { + arguments.addPeer() + }) + } + } +} + +private struct WidgetSetupScreenControllerState: Equatable { + var editing: Bool = false + var peerIdWithRevealedOptions: PeerId? = nil +} + +private func selectivePrivacyPeersControllerEntries(presentationData: PresentationData, state: WidgetSetupScreenControllerState, useHints: Bool, peers: [SelectivePrivacyPeer]) -> [WidgetSetupScreenEntry] { + var entries: [WidgetSetupScreenEntry] = [] + + entries.append(.useHints("Show Recent Chats", useHints)) + + if !useHints { + entries.append(.peersHeaderItem(presentationData.strings.Privacy_ChatsTitle)) + entries.append(.addItem(presentationData.strings.Privacy_AddNewPeer, state.editing)) + var index: Int32 = 0 + for peer in peers { + entries.append(.peerItem(index, presentationData.dateTimeFormat, presentationData.nameDisplayOrder, peer, ItemListPeerItemEditing(editable: true, editing: state.editing, canBeReordered: state.editing, revealed: peer.peer.id == state.peerIdWithRevealedOptions), true)) + index += 1 + } + } + + return entries +} + +public func widgetSetupScreen(context: AccountContext) -> ViewController { + let statePromise = ValuePromise(WidgetSetupScreenControllerState(), ignoreRepeated: true) + let stateValue = Atomic(value: WidgetSetupScreenControllerState()) + let updateState: ((WidgetSetupScreenControllerState) -> WidgetSetupScreenControllerState) -> Void = { f in + statePromise.set(stateValue.modify { f($0) }) + } + + var dismissImpl: (() -> Void)? + var presentControllerImpl: ((ViewController, ViewControllerPresentationArguments?) -> Void)? + var pushControllerImpl: ((ViewController) -> Void)? + + let actionsDisposable = DisposableSet() + let addPeerDisposable = MetaDisposable() + actionsDisposable.add(addPeerDisposable) + + let arguments = Arguments(context: context, updateUseHints: { value in + let _ = (updateWidgetSettingsInteractively(postbox: context.account.postbox, { settings in + var settings = settings + settings.useHints = value + return settings + }) + |> deliverOnMainQueue).start() + }, setPeerIdWithRevealedOptions: { peerId, fromPeerId in + updateState { state in + var state = state + if (peerId == nil && fromPeerId == state.peerIdWithRevealedOptions) || (peerId != nil && fromPeerId == nil) { + state.peerIdWithRevealedOptions = peerId + } + return state + } + }, removePeer: { memberId in + + }, addPeer: { + let controller = context.sharedContext.makeContactMultiselectionController(ContactMultiselectionControllerParams(context: context, mode: .peerSelection(searchChatList: true, searchGroups: true, searchChannels: false), options: [])) + addPeerDisposable.set((controller.result + |> take(1) + |> deliverOnMainQueue).start(next: { [weak controller] result in + var peerIds: [ContactListPeerId] = [] + if case let .result(peerIdsValue, _) = result { + peerIds = peerIdsValue + } + + let _ = (updateWidgetSettingsInteractively(postbox: context.account.postbox, { settings in + var settings = settings + for peerId in peerIds { + switch peerId { + case let .peer(peerId): + settings.peers.removeAll(where: { $0 == peerId }) + settings.peers.insert(peerId, at: 0) + case .deviceContact: + break + } + } + return settings + }) + |> deliverOnMainQueue).start(completed: { + controller?.dismiss() + }) + })) + presentControllerImpl?(controller, ViewControllerPresentationArguments(presentationAnimation: .modalSheet)) + }, openPeer: { peerId in + let _ = (context.account.postbox.transaction { transaction -> Peer? in + return transaction.getPeer(peerId) + } + |> deliverOnMainQueue).start(next: { peer in + guard let peer = peer, let controller = context.sharedContext.makePeerInfoController(context: context, peer: peer, mode: .generic, avatarInitiallyExpanded: false, fromChat: false) else { + return + } + pushControllerImpl?(controller) + }) + }) + + var previousPeers: [SelectivePrivacyPeer]? + var previousState: WidgetSetupScreenControllerState? + + struct InputData { + var settings: WidgetSettings + var peers: [SelectivePrivacyPeer] + } + + let preferencesKey: PostboxViewKey = .preferences(keys: Set([ + ApplicationSpecificPreferencesKeys.widgetSettings + ])) + + let inputData: Signal = context.account.postbox.combinedView(keys: [ + preferencesKey + ]) + |> mapToSignal { views -> Signal in + let widgetSettings: WidgetSettings + if let view = views.views[preferencesKey] as? PreferencesView, let value = view.values[ApplicationSpecificPreferencesKeys.widgetSettings] as? WidgetSettings { + widgetSettings = value + } else { + widgetSettings = .default + } + + return context.account.postbox.transaction { transaction -> InputData in + return InputData( + settings: widgetSettings, + peers: widgetSettings.peers.compactMap { peerId -> SelectivePrivacyPeer? in + guard let peer = transaction.getPeer(peerId) else { + return nil + } + return SelectivePrivacyPeer(peer: peer, participantCount: nil) + } + ) + } + } + + let signal = combineLatest(context.sharedContext.presentationData, statePromise.get(), inputData) + |> deliverOnMainQueue + |> map { presentationData, state, inputData -> (ItemListControllerState, (ItemListNodeState, Any)) in + var rightNavigationButton: ItemListNavigationButton? + if !inputData.peers.isEmpty { + if state.editing { + rightNavigationButton = ItemListNavigationButton(content: .text(presentationData.strings.Common_Done), style: .bold, enabled: true, action: { + updateState { state in + var state = state + state.editing = false + return state + } + }) + } else { + rightNavigationButton = ItemListNavigationButton(content: .text(presentationData.strings.Common_Edit), style: .regular, enabled: true, action: { + updateState { state in + var state = state + state.editing = true + return state + } + }) + } + } + + let previous = previousPeers + previousPeers = inputData.peers + + let controllerState = ItemListControllerState(presentationData: ItemListPresentationData(presentationData), title: .text("Widget"), leftNavigationButton: nil, rightNavigationButton: rightNavigationButton, backNavigationButton: ItemListBackButton(title: presentationData.strings.Common_Back), animateChanges: true) + + var animated = true + if let previous = previous { + if previous.count <= inputData.peers.count { + if Set(previous.map { $0.peer.id }) == Set(inputData.peers.map { $0.peer.id }) && previous.map({ $0.peer.id }) != inputData.peers.map({ $0.peer.id }) { + } else { + animated = false + } + } + } else { + animated = false + } + if let previousState = previousState { + if previousState.editing != state.editing { + animated = true + } + } else { + animated = false + } + + previousState = state + + let listState = ItemListNodeState(presentationData: ItemListPresentationData(presentationData), entries: selectivePrivacyPeersControllerEntries(presentationData: presentationData, state: state, useHints: inputData.settings.useHints, peers: inputData.peers), style: .blocks, emptyStateItem: nil, animateChanges: animated) + + return (controllerState, (listState, arguments)) + } + |> afterDisposed { + actionsDisposable.dispose() + } + + let controller = ItemListController(context: context, state: signal) + dismissImpl = { [weak controller] in + if let controller = controller, let navigationController = controller.navigationController as? NavigationController { + navigationController.filterController(controller, animated: true) + } + } + presentControllerImpl = { [weak controller] c, p in + if let controller = controller { + controller.present(c, in: .window(.root), with: p) + } + } + pushControllerImpl = { [weak controller] c in + if let navigationController = controller?.navigationController as? NavigationController { + navigationController.pushViewController(c) + } + } + + controller.setReorderEntry({ (fromIndex: Int, toIndex: Int, entries: [WidgetSetupScreenEntry]) -> Signal in + let fromEntry = entries[fromIndex] + guard case let .peerItem(_, _, _, fromPeer, _, _) = fromEntry else { + return .single(false) + } + var referencePeerId: PeerId? + var beforeAll = false + var afterAll = false + if toIndex < entries.count { + switch entries[toIndex] { + case let .peerItem(_, _, _, peer, _, _): + referencePeerId = peer.peer.id + default: + if entries[toIndex] < fromEntry { + beforeAll = true + } else { + afterAll = true + } + } + } else { + afterAll = true + } + + return context.account.postbox.transaction { transaction -> Bool in + var updatedOrder = false + + updateWidgetSettingsInteractively(transaction: transaction, { settings in + let initialPeers = settings.peers + var settings = settings + + if let index = settings.peers.firstIndex(of: fromPeer.peer.id) { + settings.peers.remove(at: index) + } + if let referencePeerId = referencePeerId { + var inserted = false + for i in 0 ..< settings.peers.count { + if settings.peers[i] == referencePeerId { + if fromIndex < toIndex { + settings.peers.insert(fromPeer.peer.id, at: i + 1) + } else { + settings.peers.insert(fromPeer.peer.id, at: i) + } + inserted = true + break + } + } + if !inserted { + settings.peers.append(fromPeer.peer.id) + } + } else if beforeAll { + settings.peers.insert(fromPeer.peer.id, at: 0) + } else if afterAll { + settings.peers.append(fromPeer.peer.id) + } + + if initialPeers != settings.peers { + updatedOrder = true + } + return settings + }) + + return updatedOrder + } + }) + + return controller +}