diff --git a/TelegramUI.xcodeproj/project.pbxproj b/TelegramUI.xcodeproj/project.pbxproj index 0635d5f732..64934ce34f 100644 --- a/TelegramUI.xcodeproj/project.pbxproj +++ b/TelegramUI.xcodeproj/project.pbxproj @@ -112,6 +112,7 @@ D005808B21CAB8F000CB7CD3 /* VoipDerivedState.swift in Sources */ = {isa = PBXBuildFile; fileRef = D005808A21CAB8F000CB7CD3 /* VoipDerivedState.swift */; }; D00580A021DCF0A200CB7CD3 /* WallpaperListPreviewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D005809F21DCF0A200CB7CD3 /* WallpaperListPreviewController.swift */; }; D00580A221DCF0B700CB7CD3 /* WallpaperListPreviewControllerNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D00580A121DCF0B700CB7CD3 /* WallpaperListPreviewControllerNode.swift */; }; + D00580B121E3DEF200CB7CD3 /* MergedItemListItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = D00580B021E3DEF200CB7CD3 /* MergedItemListItem.swift */; }; D0068FA821760FA300D1B315 /* StoreDownloadedMedia.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0068FA721760FA300D1B315 /* StoreDownloadedMedia.swift */; }; D007019C2029E8F2006B9E34 /* LegqacyICloudFileController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D007019B2029E8F2006B9E34 /* LegqacyICloudFileController.swift */; }; D007019E2029EFDD006B9E34 /* ICloudResources.swift in Sources */ = {isa = PBXBuildFile; fileRef = D007019D2029EFDD006B9E34 /* ICloudResources.swift */; }; @@ -1232,6 +1233,7 @@ D005808A21CAB8F000CB7CD3 /* VoipDerivedState.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VoipDerivedState.swift; sourceTree = ""; }; D005809F21DCF0A200CB7CD3 /* WallpaperListPreviewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WallpaperListPreviewController.swift; sourceTree = ""; }; D00580A121DCF0B700CB7CD3 /* WallpaperListPreviewControllerNode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WallpaperListPreviewControllerNode.swift; sourceTree = ""; }; + D00580B021E3DEF200CB7CD3 /* MergedItemListItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MergedItemListItem.swift; sourceTree = ""; }; D0068FA721760FA300D1B315 /* StoreDownloadedMedia.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StoreDownloadedMedia.swift; sourceTree = ""; }; D007019B2029E8F2006B9E34 /* LegqacyICloudFileController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LegqacyICloudFileController.swift; sourceTree = ""; }; D007019D2029EFDD006B9E34 /* ICloudResources.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ICloudResources.swift; sourceTree = ""; }; @@ -3924,6 +3926,7 @@ D0E305AE1E5BA8E000D7A3A2 /* ItemListLoadingIndicatorEmptyStateItem.swift */, D09AEFD31E5BAF67005C1A8B /* ItemListTextEmptyStateItem.swift */, D0BFAE5A20AB35D200793CF2 /* IconSwitchNode.swift */, + D00580B021E3DEF200CB7CD3 /* MergedItemListItem.swift */, ); name = Items; sourceTree = ""; @@ -5484,6 +5487,7 @@ 9F06830B21A404C4001D8EDB /* NotificationExcetionSettingsController.swift in Sources */, D0EC6D891EB9F58800EBF1C3 /* ChatSecretAutoremoveTimerActionSheet.swift in Sources */, D05D8B782195E0050064586F /* SetupTwoStepVerificationContentNode.swift in Sources */, + D00580B121E3DEF200CB7CD3 /* MergedItemListItem.swift in Sources */, D0EC6D8A1EB9F58800EBF1C3 /* ChatInfo.swift in Sources */, D0EC6D8B1EB9F58800EBF1C3 /* ChatHistoryNavigationStack.swift in Sources */, D0EC6D8C1EB9F58800EBF1C3 /* NavigateToChatController.swift in Sources */, diff --git a/TelegramUI/BotPaymentSwitchItemNode.swift b/TelegramUI/BotPaymentSwitchItemNode.swift index d24982ae01..2a9975a7c3 100644 --- a/TelegramUI/BotPaymentSwitchItemNode.swift +++ b/TelegramUI/BotPaymentSwitchItemNode.swift @@ -66,6 +66,8 @@ final class BotPaymentSwitchItemNode: BotPaymentItemNode { self.switchNode.frameColor = theme.list.itemSwitchColors.frameColor self.switchNode.contentColor = theme.list.itemSwitchColors.contentColor self.switchNode.handleColor = theme.list.itemSwitchColors.handleColor + self.switchNode.positiveContentColor = theme.list.itemSwitchColors.positiveColor + self.switchNode.negativeContentColor = theme.list.itemSwitchColors.negativeColor } let leftInset: CGFloat = 16.0 diff --git a/TelegramUI/ChannelBannedMemberController.swift b/TelegramUI/ChannelBannedMemberController.swift index 7ccd38fe29..754d967bb5 100644 --- a/TelegramUI/ChannelBannedMemberController.swift +++ b/TelegramUI/ChannelBannedMemberController.swift @@ -510,7 +510,7 @@ public func channelBannedMemberController(account: Account, peerId: PeerId, memb if state.updating { rightNavigationButton = ItemListNavigationButton(content: .none, style: .activity, enabled: true, action: {}) } else { - rightNavigationButton = ItemListNavigationButton(content: .text(presentationData.strings.Common_Done), style: .bold, enabled: true, action: { + rightNavigationButton = ItemListNavigationButton(content: .text(presentationData.strings.GroupPermission_ApplyAlertAction), style: .bold, enabled: true, action: { let _ = (peerView.get() |> take(1) |> deliverOnMainQueue).start(next: { view in diff --git a/TelegramUI/ChannelInfoController.swift b/TelegramUI/ChannelInfoController.swift index 891c1c5138..6b6f0def8c 100644 --- a/TelegramUI/ChannelInfoController.swift +++ b/TelegramUI/ChannelInfoController.swift @@ -301,15 +301,15 @@ private enum ChannelInfoEntry: ItemListNodeEntry { }) case let .admins(theme, text, value): - return ItemListDisclosureItem(theme: theme, icon: PresentationResourcesChat.groupInfoAdminsIcon(theme), title: text, label: value, sectionId: self.section, style: .plain, action: { + return ItemListDisclosureItem(theme: theme, title: text, label: value, sectionId: self.section, style: .plain, action: { arguments.openAdmins() }) case let .members(theme, text, value): - return ItemListDisclosureItem(theme: theme, icon: PresentationResourcesChat.groupInfoMembersIcon(theme), title: text, label: value, sectionId: self.section, style: .plain, action: { + return ItemListDisclosureItem(theme: theme, title: text, label: value, sectionId: self.section, style: .plain, action: { arguments.openMembers() }) case let .banned(theme, text, value): - return ItemListDisclosureItem(theme: theme, icon: PresentationResourcesChat.groupInfoBannedIcon(theme), title: text, label: value, sectionId: self.section, style: .plain, action: { + return ItemListDisclosureItem(theme: theme, title: text, label: value, sectionId: self.section, style: .plain, action: { arguments.openBanned() }) case let .signMessages(theme, text, value): @@ -473,6 +473,8 @@ private func channelInfoEntries(account: Account, presentationData: Presentation } else { notificationsText = presentationData.strings.UserInfo_NotificationsDisabled } + } else if case .default = notificationSettings.messageSound { + notificationsText = presentationData.strings.UserInfo_NotificationsEnabled } else { notificationsText = localizedPeerNotificationSoundString(strings: presentationData.strings, sound: notificationSettings.messageSound, default: globalNotificationSettings.effective.channels.sound) } @@ -794,6 +796,11 @@ public func channelInfoController(account: Account, peerId: PeerId) -> ViewContr } } + var canEditChannel = false + if let peer = view.peers[view.peerId] as? TelegramChannel { + canEditChannel = peer.hasPermission(.changeInfo) + } + var leftNavigationButton: ItemListNavigationButton? var rightNavigationButton: ItemListNavigationButton? if let editingState = state.editingState { @@ -856,7 +863,7 @@ public func channelInfoController(account: Account, peerId: PeerId) -> ViewContr })) }) } - } else { + } else if canEditChannel { rightNavigationButton = ItemListNavigationButton(content: .text(presentationData.strings.Common_Edit), style: .regular, enabled: true, action: { if let channel = peer as? TelegramChannel, case .broadcast = channel.info { var text = "" diff --git a/TelegramUI/ChatHistoryEntriesForView.swift b/TelegramUI/ChatHistoryEntriesForView.swift index 2563ffd7b6..c29789fe1d 100644 --- a/TelegramUI/ChatHistoryEntriesForView.swift +++ b/TelegramUI/ChatHistoryEntriesForView.swift @@ -113,7 +113,7 @@ func chatHistoryEntriesForView(location: ChatLocation, view: MessageHistoryView, entries.insert(.ChatInfoEntry(botInfo.description, presentationData), at: 0) } var isEmpty = true - if entries.count <= 2 { + if entries.count <= 3 { loop: for entry in view.entries { switch entry { case let .MessageEntry(entry): @@ -121,7 +121,7 @@ func chatHistoryEntriesForView(location: ChatLocation, view: MessageHistoryView, for media in entry.0.media { if let action = media as? TelegramMediaAction { switch action.action { - case .groupCreated, .photoUpdated: + case .groupCreated, .photoUpdated, .channelMigratedFromGroup, .groupMigratedToChannel: isEmptyMedia = true default: break diff --git a/TelegramUI/ChatHistoryListNode.swift b/TelegramUI/ChatHistoryListNode.swift index a3b415b0da..aadca16f7c 100644 --- a/TelegramUI/ChatHistoryListNode.swift +++ b/TelegramUI/ChatHistoryListNode.swift @@ -121,27 +121,48 @@ struct ChatHistoryListViewTransition { let animateIn: Bool } -private func maxMessageIndexForEntries(_ entries: [ChatHistoryEntry], indexRange: (Int, Int)) -> (incoming: MessageIndex?, overall: MessageIndex?) { +private func maxMessageIndexForEntries(_ view: ChatHistoryView, indexRange: (Int, Int)) -> (incoming: MessageIndex?, overall: MessageIndex?) { + var incoming: MessageIndex? var overall: MessageIndex? - for i in (indexRange.0 ... indexRange.1).reversed() { - if case let .MessageEntry(message, _, _, _, _, _) = entries[i] { - if overall == nil { - overall = MessageIndex(message) + var nextLowestIndex: MessageIndex? + if indexRange.0 >= 0 && indexRange.0 < view.filteredEntries.count { + if indexRange.0 > 0 { + nextLowestIndex = view.filteredEntries[indexRange.0 - 1].index + } + } + var nextHighestIndex: MessageIndex? + if indexRange.1 >= 0 && indexRange.1 < view.filteredEntries.count { + if indexRange.1 < view.filteredEntries.count - 1 { + nextHighestIndex = view.filteredEntries[indexRange.1 + 1].index + } + } + for i in (0 ..< view.originalView.entries.count).reversed() { + let index = view.originalView.entries[i].index + if let nextLowestIndex = nextLowestIndex { + if index <= nextLowestIndex { + continue } - if message.flags.contains(.Incoming) { - return (MessageIndex(message), overall) + } + if let nextHighestIndex = nextHighestIndex { + if index >= nextHighestIndex { + continue } - } else if case let .MessageGroupEntry(_, messages, _) = entries[i] { - let index = MessageIndex(messages[messages.count - 1].0) - if overall == nil { + } + if case let .MessageEntry(messageEntry) = view.originalView.entries[i] { + if overall == nil || overall! < index { overall = index } - if messages[messages.count - 1].0.flags.contains(.Incoming) { - return (index, overall) + if messageEntry.0.flags.contains(.Incoming) { + if incoming == nil || incoming! < index { + incoming = index + } + } + if incoming != nil { + return (incoming, overall) } } } - return (nil, overall) + return (incoming, overall) } private func mappedInsertEntries(account: Account, chatLocation: ChatLocation, associatedData: ChatMessageItemAssociatedData, controllerInteraction: ChatControllerInteraction, mode: ChatHistoryListMode, entries: [ChatHistoryViewTransitionInsertEntry]) -> [ListViewInsertItem] { @@ -654,7 +675,7 @@ public final class ChatHistoryListNode: ListView, ChatHistoryNode { } if readIndexRange.0 <= readIndexRange.1 { - let (maxIncomingIndex, maxOverallIndex) = maxMessageIndexForEntries(historyView.filteredEntries, indexRange: readIndexRange) + let (maxIncomingIndex, maxOverallIndex) = maxMessageIndexForEntries(historyView, indexRange: readIndexRange) if let maxIncomingIndex = maxIncomingIndex { strongSelf.updateMaxVisibleReadIncomingMessageIndex(maxIncomingIndex) @@ -980,7 +1001,7 @@ public final class ChatHistoryListNode: ListView, ChatHistoryNode { visibleFirstIndex += 1 }*/ if visibleFirstIndex <= visible.lastIndex { - let (messageIndex, _) = maxMessageIndexForEntries(transition.historyView.filteredEntries, indexRange: (transition.historyView.filteredEntries.count - 1 - visible.lastIndex, transition.historyView.filteredEntries.count - 1 - visibleFirstIndex)) + let (messageIndex, _) = maxMessageIndexForEntries(transition.historyView, indexRange: (transition.historyView.filteredEntries.count - 1 - visible.lastIndex, transition.historyView.filteredEntries.count - 1 - visibleFirstIndex)) if let messageIndex = messageIndex { strongSelf.updateMaxVisibleReadIncomingMessageIndex(messageIndex) } diff --git a/TelegramUI/ChatListController.swift b/TelegramUI/ChatListController.swift index 377e963c7d..2707d2da53 100644 --- a/TelegramUI/ChatListController.swift +++ b/TelegramUI/ChatListController.swift @@ -436,10 +436,11 @@ public class ChatListController: TelegramController, KeyShortcutResponder, UIVie self.chatListDisplayNode.requestOpenMessageFromSearch = { [weak self] peer, messageId in if let strongSelf = self { - strongSelf.openMessageFromSearchDisposable.set((storedMessageFromSearchPeer(account: strongSelf.account, peer: peer) |> deliverOnMainQueue).start(completed: { [weak strongSelf] in + strongSelf.openMessageFromSearchDisposable.set((storedMessageFromSearchPeer(account: strongSelf.account, peer: peer) + |> deliverOnMainQueue).start(next: { [weak strongSelf] actualPeerId in if let strongSelf = strongSelf { if let navigationController = strongSelf.navigationController as? NavigationController { - navigateToChatController(navigationController: navigationController, account: strongSelf.account, chatLocation: .peer(messageId.peerId), messageId: messageId, purposefulAction: { + navigateToChatController(navigationController: navigationController, account: strongSelf.account, chatLocation: .peer(actualPeerId), messageId: messageId, purposefulAction: { self?.deactivateSearch(animated: false) }) strongSelf.chatListDisplayNode.chatListNode.clearHighlightAnimated(true) diff --git a/TelegramUI/ChatListItem.swift b/TelegramUI/ChatListItem.swift index c5e19d1ca1..761fe86321 100644 --- a/TelegramUI/ChatListItem.swift +++ b/TelegramUI/ChatListItem.swift @@ -100,8 +100,10 @@ class ChatListItem: ListViewItem { func selected(listView: ListView) { switch self.content { case let .peer(message, peer, _, _, _, _, _, isAd, _): - if let message = message { - self.interaction.messageSelected(message, isAd) + if let message = message, let peer = peer.peer { + self.interaction.messageSelected(peer, message, isAd) + } else if let peer = peer.peer { + self.interaction.peerSelected(peer) } else if let peer = peer.peers[peer.peerId] { self.interaction.peerSelected(peer) } diff --git a/TelegramUI/ChatListNode.swift b/TelegramUI/ChatListNode.swift index 19a956c98c..55367fc02a 100644 --- a/TelegramUI/ChatListNode.swift +++ b/TelegramUI/ChatListNode.swift @@ -60,7 +60,7 @@ final class ChatListNodeInteraction { let activateSearch: () -> Void let peerSelected: (Peer) -> Void let togglePeerSelected: (PeerId) -> Void - let messageSelected: (Message, Bool) -> Void + let messageSelected: (Peer, Message, Bool) -> Void let groupSelected: (PeerGroupId) -> Void let addContact: (String) -> Void let setPeerIdWithRevealedOptions: (PeerId?, PeerId?) -> Void @@ -72,7 +72,7 @@ final class ChatListNodeInteraction { var highlightedChatLocation: ChatListHighlightedLocation? - init(activateSearch: @escaping () -> Void, peerSelected: @escaping (Peer) -> Void, togglePeerSelected: @escaping (PeerId) -> Void, messageSelected: @escaping (Message, Bool) -> Void, groupSelected: @escaping (PeerGroupId) -> Void, addContact: @escaping (String) -> Void, setPeerIdWithRevealedOptions: @escaping (PeerId?, PeerId?) -> Void, setItemPinned: @escaping (PinnedItemId, Bool) -> Void, setPeerMuted: @escaping (PeerId, Bool) -> Void, deletePeer: @escaping (PeerId) -> Void, updatePeerGrouping: @escaping (PeerId, Bool) -> Void, togglePeerMarkedUnread: @escaping (PeerId, Bool) -> Void) { + init(activateSearch: @escaping () -> Void, peerSelected: @escaping (Peer) -> Void, togglePeerSelected: @escaping (PeerId) -> Void, messageSelected: @escaping (Peer, Message, Bool) -> Void, groupSelected: @escaping (PeerGroupId) -> Void, addContact: @escaping (String) -> Void, setPeerIdWithRevealedOptions: @escaping (PeerId?, PeerId?) -> Void, setItemPinned: @escaping (PinnedItemId, Bool) -> Void, setPeerMuted: @escaping (PeerId, Bool) -> Void, deletePeer: @escaping (PeerId) -> Void, updatePeerGrouping: @escaping (PeerId, Bool) -> Void, togglePeerMarkedUnread: @escaping (PeerId, Bool) -> Void) { self.activateSearch = activateSearch self.peerSelected = peerSelected self.togglePeerSelected = togglePeerSelected @@ -386,9 +386,9 @@ final class ChatListNode: ListView { } return state } - }, messageSelected: { [weak self] message, isAd in + }, messageSelected: { [weak self] peer, message, isAd in if let strongSelf = self, let peerSelected = strongSelf.peerSelected { - peerSelected(message.id.peerId, true, isAd) + peerSelected(peer.id, true, isAd) } }, groupSelected: { [weak self] groupId in if let strongSelf = self, let groupSelected = strongSelf.groupSelected { diff --git a/TelegramUI/ChatListSearchContainerNode.swift b/TelegramUI/ChatListSearchContainerNode.swift index e9af505fc2..ac5a9bb3a2 100644 --- a/TelegramUI/ChatListSearchContainerNode.swift +++ b/TelegramUI/ChatListSearchContainerNode.swift @@ -842,7 +842,7 @@ final class ChatListSearchContainerNode: SearchDisplayControllerContentNode { let _ = addRecentlySearchedPeer(postbox: account.postbox, peerId: peer.id).start() self?.listNode.clearHighlightAnimated(true) }, togglePeerSelected: { _ in - }, messageSelected: { [weak self] message, _ in + }, messageSelected: { [weak self] peer, message, _ in if let peer = message.peers[message.id.peerId] { openMessage(peer, message.id) } diff --git a/TelegramUI/ChatMessageActionItemNode.swift b/TelegramUI/ChatMessageActionItemNode.swift index 4aef798898..eb3e3b1088 100644 --- a/TelegramUI/ChatMessageActionItemNode.swift +++ b/TelegramUI/ChatMessageActionItemNode.swift @@ -232,7 +232,7 @@ private func universalServiceMessageString(theme: ChatPresentationThemeData?, st case .joinedByLink: attributedString = addAttributesToStringWithRanges(strings.Notification_JoinedGroupByLink(authorName), body: bodyAttributes, argumentAttributes: peerMentionsAttributes(primaryTextColor: primaryTextColor, peerIds: [(0, message.author?.id)])) case .channelMigratedFromGroup, .groupMigratedToChannel: - attributedString = NSAttributedString(string: strings.Notification_ChannelMigratedFrom, font: titleFont, textColor: primaryTextColor) + attributedString = NSAttributedString(string: "", font: titleFont, textColor: primaryTextColor) case let .messageAutoremoveTimeoutUpdated(timeout): if timeout > 0 { let timeValue = timeIntervalString(strings: strings, value: timeout) diff --git a/TelegramUI/ContactMultiselectionController.swift b/TelegramUI/ContactMultiselectionController.swift index 80319e1cf0..d6bf917117 100644 --- a/TelegramUI/ContactMultiselectionController.swift +++ b/TelegramUI/ContactMultiselectionController.swift @@ -136,7 +136,7 @@ class ContactMultiselectionController: ViewController { let rightNavigationButton = UIBarButtonItem(title: self.presentationData.strings.Common_Next, style: .done, target: self, action: #selector(self.rightNavigationButtonPressed)) self.rightNavigationButton = rightNavigationButton self.navigationItem.rightBarButtonItem = self.rightNavigationButton - rightNavigationButton.isEnabled = false + rightNavigationButton.isEnabled = count != 0 case .channelCreation: self.titleView.title = CounterContollerTitle(title: self.presentationData.strings.GroupInfo_AddParticipantTitle, counter: "") let rightNavigationButton = UIBarButtonItem(title: self.presentationData.strings.Common_Next, style: .done, target: self, action: #selector(self.rightNavigationButtonPressed)) diff --git a/TelegramUI/DefaultDarkAccentPresentationTheme.swift b/TelegramUI/DefaultDarkAccentPresentationTheme.swift index b5f4c96852..282ebc067c 100644 --- a/TelegramUI/DefaultDarkAccentPresentationTheme.swift +++ b/TelegramUI/DefaultDarkAccentPresentationTheme.swift @@ -57,7 +57,9 @@ private let rootController = PresentationThemeRootController( private let switchColors = PresentationThemeSwitch( frameColor: UIColor(rgb: 0xDBF5FF, alpha: 0.5), handleColor: UIColor(rgb: 0x121212), - contentColor: accentColor + contentColor: accentColor, + positiveColor: accentColor, + negativeColor: destructiveColor ) private let list = PresentationThemeList( diff --git a/TelegramUI/DefaultDarkPresentationTheme.swift b/TelegramUI/DefaultDarkPresentationTheme.swift index 65d30f6cdd..4a06a0d340 100644 --- a/TelegramUI/DefaultDarkPresentationTheme.swift +++ b/TelegramUI/DefaultDarkPresentationTheme.swift @@ -57,7 +57,9 @@ private let rootController = PresentationThemeRootController( private let switchColors = PresentationThemeSwitch( frameColor: UIColor(rgb: 0x545454), handleColor: UIColor(rgb: 0x121212), - contentColor: UIColor(rgb: 0xb2b2b2) + contentColor: UIColor(rgb: 0xb2b2b2), + positiveColor: UIColor(rgb: 0x000000), + negativeColor: destructiveColor ) private let list = PresentationThemeList( diff --git a/TelegramUI/DefaultPresentationTheme.swift b/TelegramUI/DefaultPresentationTheme.swift index e3e5040831..c9375b9a4b 100644 --- a/TelegramUI/DefaultPresentationTheme.swift +++ b/TelegramUI/DefaultPresentationTheme.swift @@ -57,7 +57,9 @@ private func makeDefaultPresentationTheme(accentColor: UIColor, serviceBackgroun let switchColors = PresentationThemeSwitch( frameColor: UIColor(rgb: 0xe0e0e0), handleColor: UIColor(rgb: 0xffffff), - contentColor: UIColor(rgb: 0x42d451) + contentColor: UIColor(rgb: 0x42d451), + positiveColor: UIColor(rgb: 0x00B12C), + negativeColor: destructiveColor ) let list = PresentationThemeList( diff --git a/TelegramUI/GroupInfoController.swift b/TelegramUI/GroupInfoController.swift index 5590588bcd..5982a87c74 100644 --- a/TelegramUI/GroupInfoController.swift +++ b/TelegramUI/GroupInfoController.swift @@ -28,7 +28,6 @@ private final class GroupInfoArguments { let promotePeer: (RenderedChannelParticipant) -> Void let restrictPeer: (RenderedChannelParticipant) -> Void let removePeer: (PeerId) -> Void - let convertToSupergroup: () -> Void let leave: () -> Void let displayUsernameShareMenu: (String) -> Void let displayUsernameContextMenu: (String) -> Void @@ -37,7 +36,7 @@ private final class GroupInfoArguments { let openStickerPackSetup: () -> Void let openGroupTypeSetup: () -> Void - init(account: Account, peerId: PeerId, avatarAndNameInfoContext: ItemListAvatarAndNameInfoItemContext, tapAvatarAction: @escaping () -> Void, changeProfilePhoto: @escaping () -> Void, pushController: @escaping (ViewController) -> Void, presentController: @escaping (ViewController, ViewControllerPresentationArguments) -> Void, changeNotificationMuteSettings: @escaping () -> Void, openPreHistory: @escaping () -> Void, openSharedMedia: @escaping () -> Void, openAdministrators: @escaping () -> Void, openPermissions: @escaping () -> Void, updateEditingName: @escaping (ItemListAvatarAndNameInfoItemName) -> Void, updateEditingDescriptionText: @escaping (String) -> Void, setPeerIdWithRevealedOptions: @escaping (PeerId?, PeerId?) -> Void, addMember: @escaping () -> Void, promotePeer: @escaping (RenderedChannelParticipant) -> Void, restrictPeer: @escaping (RenderedChannelParticipant) -> Void, removePeer: @escaping (PeerId) -> Void, convertToSupergroup: @escaping () -> Void, leave: @escaping () -> Void, displayUsernameShareMenu: @escaping (String) -> Void, displayUsernameContextMenu: @escaping (String) -> Void, displayAboutContextMenu: @escaping (String) -> Void, aboutLinkAction: @escaping (TextLinkItemActionType, TextLinkItem) -> Void, openStickerPackSetup: @escaping () -> Void, openGroupTypeSetup: @escaping () -> Void) { + init(account: Account, peerId: PeerId, avatarAndNameInfoContext: ItemListAvatarAndNameInfoItemContext, tapAvatarAction: @escaping () -> Void, changeProfilePhoto: @escaping () -> Void, pushController: @escaping (ViewController) -> Void, presentController: @escaping (ViewController, ViewControllerPresentationArguments) -> Void, changeNotificationMuteSettings: @escaping () -> Void, openPreHistory: @escaping () -> Void, openSharedMedia: @escaping () -> Void, openAdministrators: @escaping () -> Void, openPermissions: @escaping () -> Void, updateEditingName: @escaping (ItemListAvatarAndNameInfoItemName) -> Void, updateEditingDescriptionText: @escaping (String) -> Void, setPeerIdWithRevealedOptions: @escaping (PeerId?, PeerId?) -> Void, addMember: @escaping () -> Void, promotePeer: @escaping (RenderedChannelParticipant) -> Void, restrictPeer: @escaping (RenderedChannelParticipant) -> Void, removePeer: @escaping (PeerId) -> Void, leave: @escaping () -> Void, displayUsernameShareMenu: @escaping (String) -> Void, displayUsernameContextMenu: @escaping (String) -> Void, displayAboutContextMenu: @escaping (String) -> Void, aboutLinkAction: @escaping (TextLinkItemActionType, TextLinkItem) -> Void, openStickerPackSetup: @escaping () -> Void, openGroupTypeSetup: @escaping () -> Void) { self.account = account self.peerId = peerId self.avatarAndNameInfoContext = avatarAndNameInfoContext @@ -57,7 +56,6 @@ private final class GroupInfoArguments { self.promotePeer = promotePeer self.restrictPeer = restrictPeer self.removePeer = removePeer - self.convertToSupergroup = convertToSupergroup self.leave = leave self.displayUsernameShareMenu = displayUsernameShareMenu self.displayUsernameContextMenu = displayUsernameContextMenu @@ -147,7 +145,6 @@ private enum GroupInfoEntry: ItemListNodeEntry { case permissions(PresentationTheme, String, String) case addMember(PresentationTheme, String, editing: Bool) case member(PresentationTheme, PresentationStrings, PresentationDateTimeFormat, PresentationPersonNameOrder, index: Int, peerId: PeerId, peer: Peer, participant: RenderedChannelParticipant?, presence: PeerPresence?, memberStatus: GroupInfoMemberStatus, editing: ItemListPeerItemEditing, revealActions: [ParticipantRevealAction], enabled: Bool) - case convertToSupergroup(PresentationTheme, String) case leave(PresentationTheme, String) var section: ItemListSectionId { @@ -164,7 +161,7 @@ private enum GroupInfoEntry: ItemListNodeEntry { return GroupInfoSection.memberManagement.rawValue case .addMember, .member: return GroupInfoSection.members.rawValue - case .convertToSupergroup, .leave: + case .leave: return GroupInfoSection.leave.rawValue } } @@ -230,12 +227,6 @@ private enum GroupInfoEntry: ItemListNodeEntry { } else { return false } - case let .convertToSupergroup(lhsTheme, lhsText): - if case let .convertToSupergroup(rhsTheme, rhsText) = rhs, lhsTheme === rhsTheme, lhsText == rhsText { - return true - } else { - return false - } case let .aboutHeader(lhsTheme, lhsText): if case let .aboutHeader(rhsTheme, rhsText) = rhs, lhsTheme === rhsTheme, lhsText == rhsText { return true @@ -407,8 +398,6 @@ private enum GroupInfoEntry: ItemListNodeEntry { return 17 case let .member(_, _, _, _, index, _, _, _, _, _, _, _, _): return 20 + index - case .convertToSupergroup: - return 100000 case .leave: return 100000 + 1 } @@ -516,10 +505,6 @@ private enum GroupInfoEntry: ItemListNodeEntry { }, removePeer: { peerId in arguments.removePeer(peerId) }) - case let .convertToSupergroup(theme, title): - return ItemListActionItem(theme: theme, title: title, kind: .generic, alignment: .center, sectionId: self.section, style: .blocks, action: { - arguments.convertToSupergroup() - }) case let .leave(theme, title): return ItemListActionItem(theme: theme, title: title, kind: .destructive, alignment: .center, sectionId: self.section, style: .blocks, action: { arguments.leave() @@ -746,6 +731,8 @@ private func groupInfoEntries(account: Account, presentationData: PresentationDa } else { notificationsText = presentationData.strings.UserInfo_NotificationsDisabled } + } else if case .default = peerNotificationSettings.messageSound { + notificationsText = presentationData.strings.UserInfo_NotificationsEnabled } else { notificationsText = localizedPeerNotificationSoundString(strings: presentationData.strings, sound: peerNotificationSettings.messageSound, default: globalNotificationSettings.effective.channels.sound) } @@ -1023,35 +1010,40 @@ private func groupInfoEntries(account: Account, presentationData: PresentationDa var canPromote: Bool var canRestrict: Bool - switch participant.participant { - case .creator: - canPromote = false - canRestrict = false - case let .member(_, _, adminRights, bannedRights): - if channel.hasPermission(.addAdmins) { - canPromote = true - } else { + if participant.peer.id == account.peerId { + canPromote = false + canRestrict = false + } else { + switch participant.participant { + case .creator: canPromote = false - } - if channel.hasPermission(.banMembers) { - canRestrict = true - } else { canRestrict = false - } - if canPromote { - if let bannedRights = bannedRights { - if bannedRights.restrictedBy != account.peerId && !channel.flags.contains(.isCreator) { - canPromote = false + case let .member(_, _, adminRights, bannedRights): + if channel.hasPermission(.addAdmins) { + canPromote = true + } else { + canPromote = false + } + if channel.hasPermission(.banMembers) { + canRestrict = true + } else { + canRestrict = false + } + if canPromote { + if let bannedRights = bannedRights { + if bannedRights.restrictedBy != account.peerId && !channel.flags.contains(.isCreator) { + canPromote = false + } } } - } - if canRestrict { - if let adminRights = adminRights { - if adminRights.promotedBy != account.peerId && !channel.flags.contains(.isCreator) { - canRestrict = false + if canRestrict { + if let adminRights = adminRights { + if adminRights.promotedBy != account.peerId && !channel.flags.contains(.isCreator) { + canRestrict = false + } } } - } + } } var peerActions: [ParticipantRevealAction] = [] @@ -1069,9 +1061,6 @@ private func groupInfoEntries(account: Account, presentationData: PresentationDa if let group = view.peers[view.peerId] as? TelegramGroup { if case .Member = group.membership { - if case .creator = group.role, state.editingState != nil { - entries.append(.convertToSupergroup(presentationData.theme, presentationData.strings.GroupInfo_ConvertToSupergroup)) - } entries.append(.leave(presentationData.theme, presentationData.strings.Group_LeaveGroup)) } } else if let channel = view.peers[view.peerId] as? TelegramChannel { @@ -1659,8 +1648,6 @@ public func groupInfoController(account: Account, peerId: PeerId) -> ViewControl } } removeMemberDisposable.set(signal.start()) - }, convertToSupergroup: { - pushControllerImpl?(convertToSupergroupController(account: account, peerId: peerId)) }, leave: { let _ = (peerView.get() |> take(1) @@ -1761,7 +1748,24 @@ public func groupInfoController(account: Account, peerId: PeerId) -> ViewControl } } - let rightNavigationButton: ItemListNavigationButton + var canEditGroupInfo = false + if let group = view.peers[view.peerId] as? TelegramGroup { + switch group.role { + case .admin, .creator: + canEditGroupInfo = true + case .member: + break + } + if !group.hasBannedPermission(.banChangeInfo) { + canEditGroupInfo = true + } + } else if let channel = view.peers[view.peerId] as? TelegramChannel { + if channel.hasPermission(.changeInfo) { + canEditGroupInfo = true + } + } + + var rightNavigationButton: ItemListNavigationButton? var secondaryRightNavigationButton: ItemListNavigationButton? if let editingState = state.editingState { var doneEnabled = true @@ -1820,7 +1824,7 @@ public func groupInfoController(account: Account, peerId: PeerId) -> ViewControl })) }) } - } else { + } else if canEditGroupInfo { rightNavigationButton = ItemListNavigationButton(content: .text(presentationData.strings.Common_Edit), style: .regular, enabled: true, action: { if let peer = peer as? TelegramGroup { var text = "" @@ -1847,7 +1851,14 @@ public func groupInfoController(account: Account, peerId: PeerId) -> ViewControl } }) } - + } else { + if peer is TelegramChannel { + rightNavigationButton = ItemListNavigationButton(content: .icon(.search), style: .regular, enabled: true, action: { + updateState { state in + return state.withUpdatedSearchingMembers(true) + } + }) + } } var searchItem: ItemListControllerSearch? diff --git a/TelegramUI/HashtagSearchController.swift b/TelegramUI/HashtagSearchController.swift index f9bb2c88c4..e2c9507366 100644 --- a/TelegramUI/HashtagSearchController.swift +++ b/TelegramUI/HashtagSearchController.swift @@ -44,15 +44,13 @@ final class HashtagSearchController: TelegramController { let interaction = ChatListNodeInteraction(activateSearch: { }, peerSelected: { peer in }, togglePeerSelected: { _ in - }, messageSelected: { [weak self] message, _ in + }, messageSelected: { [weak self] peer, message, _ in if let strongSelf = self { - if let peer = message.peers[message.id.peerId] { - strongSelf.openMessageFromSearchDisposable.set((storedMessageFromSearchPeer(account: strongSelf.account, peer: peer) |> deliverOnMainQueue).start(completed: { - if let strongSelf = self { - (strongSelf.navigationController as? NavigationController)?.pushViewController(ChatController(account: strongSelf.account, chatLocation: .peer(message.id.peerId), messageId: message.id)) - } - })) - } + strongSelf.openMessageFromSearchDisposable.set((storedMessageFromSearchPeer(account: strongSelf.account, peer: peer) |> deliverOnMainQueue).start(next: { actualPeerId in + if let strongSelf = self { + (strongSelf.navigationController as? NavigationController)?.pushViewController(ChatController(account: strongSelf.account, chatLocation: .peer(actualPeerId), messageId: message.id.peerId == actualPeerId ? message.id : nil)) + } + })) strongSelf.controllerNode.listNode.clearHighlightAnimated(true) } }, groupSelected: { _ in diff --git a/TelegramUI/IconSwitchNode.swift b/TelegramUI/IconSwitchNode.swift index f37982b6eb..9658550e9b 100644 --- a/TelegramUI/IconSwitchNode.swift +++ b/TelegramUI/IconSwitchNode.swift @@ -38,6 +38,20 @@ class IconSwitchNode: ASDisplayNode { } } } + public var positiveContentColor = UIColor(rgb: 0x00ff00) { + didSet { + if self.isNodeLoaded { + (self.view as! IconSwitchNodeView).setPositiveContentColor(self.positiveContentColor) + } + } + } + public var negativeContentColor = UIColor(rgb: 0xff0000) { + didSet { + if self.isNodeLoaded { + (self.view as! IconSwitchNodeView).setNegativeContentColor(self.negativeContentColor) + } + } + } private var _isOn: Bool = false public var isOn: Bool { @@ -68,6 +82,8 @@ class IconSwitchNode: ASDisplayNode { (self.view as! UISwitch).tintColor = self.frameColor //(self.view as! UISwitch).thumbTintColor = self.handleColor (self.view as! UISwitch).onTintColor = self.contentColor + (self.view as! IconSwitchNodeView).setNegativeContentColor(self.negativeContentColor) + (self.view as! IconSwitchNodeView).setPositiveContentColor(self.positiveContentColor) (self.view as! UISwitch).setOn(self._isOn, animated: false) diff --git a/TelegramUI/ItemListSwitchItem.swift b/TelegramUI/ItemListSwitchItem.swift index 8ff7d9a13c..8ad810cbaf 100644 --- a/TelegramUI/ItemListSwitchItem.swift +++ b/TelegramUI/ItemListSwitchItem.swift @@ -75,10 +75,25 @@ private protocol ItemListSwitchNodeImpl { var frameColor: UIColor { get set } var contentColor: UIColor { get set } var handleColor: UIColor { get set } + var positiveContentColor: UIColor { get set } + var negativeContentColor: UIColor { get set } } extension SwitchNode: ItemListSwitchNodeImpl { - + var positiveContentColor: UIColor { + get { + return .white + } set(value) { + + } + } + var negativeContentColor: UIColor { + get { + return .white + } set(value) { + + } + } } extension IconSwitchNode: ItemListSwitchNodeImpl { @@ -214,6 +229,8 @@ class ItemListSwitchItemNode: ListViewItemNode { strongSelf.switchNode.frameColor = item.theme.list.itemSwitchColors.frameColor strongSelf.switchNode.contentColor = item.theme.list.itemSwitchColors.contentColor strongSelf.switchNode.handleColor = item.theme.list.itemSwitchColors.handleColor + strongSelf.switchNode.positiveContentColor = item.theme.list.itemSwitchColors.positiveColor + strongSelf.switchNode.negativeContentColor = item.theme.list.itemSwitchColors.negativeColor } let _ = titleApply() diff --git a/TelegramUI/MergedItemListItem.swift b/TelegramUI/MergedItemListItem.swift new file mode 100644 index 0000000000..9a30829567 --- /dev/null +++ b/TelegramUI/MergedItemListItem.swift @@ -0,0 +1,3 @@ +import Foundation + + diff --git a/TelegramUI/PresentationResourceKey.swift b/TelegramUI/PresentationResourceKey.swift index 313f2b9d4f..149cd1edc8 100644 --- a/TelegramUI/PresentationResourceKey.swift +++ b/TelegramUI/PresentationResourceKey.swift @@ -219,7 +219,6 @@ enum PresentationResourceKey: Int32 { case groupInfoAdminsIcon case groupInfoPermissionsIcon case groupInfoMembersIcon - case groupInfoBannedIcon case emptyChatListCheckIcon } diff --git a/TelegramUI/PresentationResourcesChat.swift b/TelegramUI/PresentationResourcesChat.swift index 6ae2162f4d..65ff5725fb 100644 --- a/TelegramUI/PresentationResourcesChat.swift +++ b/TelegramUI/PresentationResourcesChat.swift @@ -953,12 +953,6 @@ struct PresentationResourcesChat { }) } - static func groupInfoBannedIcon(_ theme: PresentationTheme) -> UIImage? { - return theme.image(PresentationResourceKey.groupInfoBannedIcon.rawValue, { _ in - return UIImage(bundleImageName: "Chat/Info/GroupBannedIcon")?.precomposed() - }) - } - static func emptyChatListCheckIcon(_ theme: PresentationTheme) -> UIImage? { return theme.image(PresentationResourceKey.emptyChatListCheckIcon.rawValue, { _ in return generateTintedImage(image: UIImage(bundleImageName: "Chat/Empty Chat/ListCheckIcon"), color: theme.chat.serviceMessage.components.withDefaultWallpaper.primaryText) diff --git a/TelegramUI/PresentationStrings.swift b/TelegramUI/PresentationStrings.swift index fcbffdd734..5f93f8e965 100644 --- a/TelegramUI/PresentationStrings.swift +++ b/TelegramUI/PresentationStrings.swift @@ -3112,460 +3112,459 @@ public final class PresentationStrings { public var ReportPeer_ReasonCopyright: String { return self._s[2665]! } public var Channel_EditAdmin_PermissinAddAdminOn: String { return self._s[2666]! } public var Paint_Duplicate: String { return self._s[2667]! } - public var Notification_ChannelMigratedFrom: String { return self._s[2668]! } - public var Passport_Address_Country: String { return self._s[2669]! } - public var Notification_RenamedChannel: String { return self._s[2671]! } - public var CheckoutInfo_ErrorPostcodeInvalid: String { return self._s[2672]! } - public var Group_MessagePhotoUpdated: String { return self._s[2673]! } - public var Channel_BanUser_PermissionSendMedia: String { return self._s[2674]! } - public var Conversation_ContextMenuBan: String { return self._s[2675]! } - public var TwoStepAuth_EmailSent: String { return self._s[2676]! } - public var MessagePoll_NoVotes: String { return self._s[2677]! } - public var Passport_Language_is: String { return self._s[2678]! } - public var Tour_Text5: String { return self._s[2680]! } + public var Passport_Address_Country: String { return self._s[2668]! } + public var Notification_RenamedChannel: String { return self._s[2670]! } + public var CheckoutInfo_ErrorPostcodeInvalid: String { return self._s[2671]! } + public var Group_MessagePhotoUpdated: String { return self._s[2672]! } + public var Channel_BanUser_PermissionSendMedia: String { return self._s[2673]! } + public var Conversation_ContextMenuBan: String { return self._s[2674]! } + public var TwoStepAuth_EmailSent: String { return self._s[2675]! } + public var MessagePoll_NoVotes: String { return self._s[2676]! } + public var Passport_Language_is: String { return self._s[2677]! } + public var Tour_Text5: String { return self._s[2679]! } public func Call_GroupFormat(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2682]!, self._r[2682]!, [_1, _2]) + return formatWithArgumentRanges(self._s[2681]!, self._r[2681]!, [_1, _2]) } - public var Paint_Edit: String { return self._s[2684]! } - public var LoginPassword_ForgotPassword: String { return self._s[2687]! } - public var GroupInfo_GroupNamePlaceholder: String { return self._s[2688]! } + public var Paint_Edit: String { return self._s[2683]! } + public var LoginPassword_ForgotPassword: String { return self._s[2686]! } + public var GroupInfo_GroupNamePlaceholder: String { return self._s[2687]! } public func Notification_Kicked(_ _0: String, _ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2689]!, self._r[2689]!, [_0, _1]) + return formatWithArgumentRanges(self._s[2688]!, self._r[2688]!, [_0, _1]) } - public var Conversation_InputTextCaptionPlaceholder: String { return self._s[2690]! } - public var AutoDownloadSettings_VideoMessagesTitle: String { return self._s[2691]! } - public var Conversation_PinMessageAlertGroup: String { return self._s[2692]! } - public var Passport_Language_uz: String { return self._s[2693]! } - public var Map_StopLiveLocation: String { return self._s[2695]! } - public var PasscodeSettings_Help: String { return self._s[2697]! } - public var NotificationsSound_Input: String { return self._s[2698]! } - public var Share_Title: String { return self._s[2700]! } - public var Login_TermsOfServiceAgree: String { return self._s[2701]! } - public var Compose_NewEncryptedChatTitle: String { return self._s[2702]! } - public var Channel_AdminLog_TitleSelectedEvents: String { return self._s[2703]! } - public var Channel_EditAdmin_PermissionEditMessages: String { return self._s[2704]! } - public var EnterPasscode_EnterTitle: String { return self._s[2705]! } + public var Conversation_InputTextCaptionPlaceholder: String { return self._s[2689]! } + public var AutoDownloadSettings_VideoMessagesTitle: String { return self._s[2690]! } + public var Conversation_PinMessageAlertGroup: String { return self._s[2691]! } + public var Passport_Language_uz: String { return self._s[2692]! } + public var Map_StopLiveLocation: String { return self._s[2694]! } + public var PasscodeSettings_Help: String { return self._s[2696]! } + public var NotificationsSound_Input: String { return self._s[2697]! } + public var Share_Title: String { return self._s[2699]! } + public var Login_TermsOfServiceAgree: String { return self._s[2700]! } + public var Compose_NewEncryptedChatTitle: String { return self._s[2701]! } + public var Channel_AdminLog_TitleSelectedEvents: String { return self._s[2702]! } + public var Channel_EditAdmin_PermissionEditMessages: String { return self._s[2703]! } + public var EnterPasscode_EnterTitle: String { return self._s[2704]! } public func Call_PrivacyErrorMessage(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2706]!, self._r[2706]!, [_0]) + return formatWithArgumentRanges(self._s[2705]!, self._r[2705]!, [_0]) } - public var Settings_CopyPhoneNumber: String { return self._s[2707]! } - public var NotificationsSound_Keys: String { return self._s[2708]! } + public var Settings_CopyPhoneNumber: String { return self._s[2706]! } + public var NotificationsSound_Keys: String { return self._s[2707]! } public func Call_ParticipantVersionOutdatedError(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2709]!, self._r[2709]!, [_0]) + return formatWithArgumentRanges(self._s[2708]!, self._r[2708]!, [_0]) } - public var Notification_MessageLifetime1w: String { return self._s[2710]! } - public var Message_Video: String { return self._s[2711]! } + public var Notification_MessageLifetime1w: String { return self._s[2709]! } + public var Message_Video: String { return self._s[2710]! } public func MESSAGE_GEO_SEPARATED(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2714]!, self._r[2714]!, [_1]) + return formatWithArgumentRanges(self._s[2713]!, self._r[2713]!, [_1]) } public func Notification_JoinedChat(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2715]!, self._r[2715]!, [_0]) + return formatWithArgumentRanges(self._s[2714]!, self._r[2714]!, [_0]) } public func PrivacySettings_LastSeenContactsPlus(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2716]!, self._r[2716]!, [_0]) + return formatWithArgumentRanges(self._s[2715]!, self._r[2715]!, [_0]) } - public var Passport_Language_mk: String { return self._s[2717]! } - public var CreatePoll_CancelConfirmation: String { return self._s[2718]! } - public var Conversation_SilentBroadcastTooltipOn: String { return self._s[2720]! } - public var PrivacyPolicy_Decline: String { return self._s[2721]! } - public var Passport_Identity_DoesNotExpire: String { return self._s[2722]! } - public var Channel_AdminLogFilter_EventsRestrictions: String { return self._s[2723]! } - public var Permissions_SiriAllow_v0: String { return self._s[2724]! } + public var Passport_Language_mk: String { return self._s[2716]! } + public var CreatePoll_CancelConfirmation: String { return self._s[2717]! } + public var Conversation_SilentBroadcastTooltipOn: String { return self._s[2719]! } + public var PrivacyPolicy_Decline: String { return self._s[2720]! } + public var Passport_Identity_DoesNotExpire: String { return self._s[2721]! } + public var Channel_AdminLogFilter_EventsRestrictions: String { return self._s[2722]! } + public var Permissions_SiriAllow_v0: String { return self._s[2723]! } public func CHAT_MESSAGE_STICKER(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2725]!, self._r[2725]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[2724]!, self._r[2724]!, [_1, _2, _3]) } public func CHANNEL_MESSAGES(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2726]!, self._r[2726]!, [_1, _2]) + return formatWithArgumentRanges(self._s[2725]!, self._r[2725]!, [_1, _2]) } public func Notification_RenamedChat(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2727]!, self._r[2727]!, [_0]) + return formatWithArgumentRanges(self._s[2726]!, self._r[2726]!, [_0]) } - public var Paint_Regular: String { return self._s[2728]! } - public var ChatSettings_AutoDownloadReset: String { return self._s[2729]! } - public var BlockedUsers_SelectUserTitle: String { return self._s[2730]! } - public var GroupInfo_InviteByLink: String { return self._s[2732]! } - public var MessageTimer_Custom: String { return self._s[2733]! } - public var UserInfo_NotificationsDefaultEnabled: String { return self._s[2734]! } - public var Passport_Address_TypeTemporaryRegistration: String { return self._s[2736]! } - public var Channel_Username_InvalidTaken: String { return self._s[2737]! } - public var Conversation_ClousStorageInfo_Description3: String { return self._s[2738]! } + public var Paint_Regular: String { return self._s[2727]! } + public var ChatSettings_AutoDownloadReset: String { return self._s[2728]! } + public var BlockedUsers_SelectUserTitle: String { return self._s[2729]! } + public var GroupInfo_InviteByLink: String { return self._s[2731]! } + public var MessageTimer_Custom: String { return self._s[2732]! } + public var UserInfo_NotificationsDefaultEnabled: String { return self._s[2733]! } + public var Passport_Address_TypeTemporaryRegistration: String { return self._s[2735]! } + public var Channel_Username_InvalidTaken: String { return self._s[2736]! } + public var Conversation_ClousStorageInfo_Description3: String { return self._s[2737]! } public func CHANNEL_MESSAGE_VIDEO(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2739]!, self._r[2739]!, [_1]) + return formatWithArgumentRanges(self._s[2738]!, self._r[2738]!, [_1]) } - public var Settings_ChatBackground: String { return self._s[2740]! } - public var Channel_Subscribers_Title: String { return self._s[2741]! } - public var ApplyLanguage_ChangeLanguageTitle: String { return self._s[2742]! } - public var Watch_ConnectionDescription: String { return self._s[2743]! } + public var Settings_ChatBackground: String { return self._s[2739]! } + public var Channel_Subscribers_Title: String { return self._s[2740]! } + public var ApplyLanguage_ChangeLanguageTitle: String { return self._s[2741]! } + public var Watch_ConnectionDescription: String { return self._s[2742]! } public func PINNED_VIDEO_SEPARATED(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2747]!, self._r[2747]!, [_1]) + return formatWithArgumentRanges(self._s[2746]!, self._r[2746]!, [_1]) } - public var EditProfile_Title: String { return self._s[2748]! } - public var NotificationsSound_Bamboo: String { return self._s[2750]! } - public var Channel_AdminLog_MessagePreviousMessage: String { return self._s[2752]! } - public var Login_SmsRequestState2: String { return self._s[2753]! } - public var Passport_Language_ar: String { return self._s[2754]! } - public var Conversation_MessageDialogEdit: String { return self._s[2755]! } - public var Common_Close: String { return self._s[2756]! } + public var EditProfile_Title: String { return self._s[2747]! } + public var NotificationsSound_Bamboo: String { return self._s[2749]! } + public var Channel_AdminLog_MessagePreviousMessage: String { return self._s[2751]! } + public var Login_SmsRequestState2: String { return self._s[2752]! } + public var Passport_Language_ar: String { return self._s[2753]! } + public var Conversation_MessageDialogEdit: String { return self._s[2754]! } + public var Common_Close: String { return self._s[2755]! } public func CHAT_MESSAGE_TEXT_SEPARATED(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2760]!, self._r[2760]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[2759]!, self._r[2759]!, [_1, _2, _3]) } public func Channel_AdminLog_MessageToggleInvitesOff(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2761]!, self._r[2761]!, [_0]) + return formatWithArgumentRanges(self._s[2760]!, self._r[2760]!, [_0]) } - public var UserInfo_About_Placeholder: String { return self._s[2762]! } + public var UserInfo_About_Placeholder: String { return self._s[2761]! } public func Conversation_FileHowToText(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2763]!, self._r[2763]!, [_0]) + return formatWithArgumentRanges(self._s[2762]!, self._r[2762]!, [_0]) } - public var GroupInfo_Permissions_SectionTitle: String { return self._s[2764]! } - public var Channel_Info_Banned: String { return self._s[2766]! } + public var GroupInfo_Permissions_SectionTitle: String { return self._s[2763]! } + public var Channel_Info_Banned: String { return self._s[2765]! } public func Time_MonthOfYear_m11(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2767]!, self._r[2767]!, [_0]) + return formatWithArgumentRanges(self._s[2766]!, self._r[2766]!, [_0]) } - public var Passport_Language_my: String { return self._s[2768]! } + public var Passport_Language_my: String { return self._s[2767]! } public func CHAT_MESSAGE_GEO_SEPARATED(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2769]!, self._r[2769]!, [_1, _2]) + return formatWithArgumentRanges(self._s[2768]!, self._r[2768]!, [_1, _2]) } public func Time_PreciseDate_m9(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2770]!, self._r[2770]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[2769]!, self._r[2769]!, [_1, _2, _3]) } - public var Preview_CopyAddress: String { return self._s[2771]! } + public var Preview_CopyAddress: String { return self._s[2770]! } public func DialogList_SinglePlayingGameSuffix(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2772]!, self._r[2772]!, [_0]) + return formatWithArgumentRanges(self._s[2771]!, self._r[2771]!, [_0]) } - public var KeyCommand_JumpToPreviousChat: String { return self._s[2773]! } - public var UserInfo_BotSettings: String { return self._s[2774]! } - public var LiveLocation_MenuStopAll: String { return self._s[2776]! } - public var Passport_PasswordCreate: String { return self._s[2777]! } - public var StickerSettings_MaskContextInfo: String { return self._s[2778]! } - public var Message_PinnedLocationMessage: String { return self._s[2779]! } - public var Map_Satellite: String { return self._s[2780]! } - public var Watch_Message_Unsupported: String { return self._s[2781]! } - public var Username_TooManyPublicUsernamesError: String { return self._s[2782]! } - public var TwoStepAuth_EnterPasswordInvalid: String { return self._s[2783]! } + public var KeyCommand_JumpToPreviousChat: String { return self._s[2772]! } + public var UserInfo_BotSettings: String { return self._s[2773]! } + public var LiveLocation_MenuStopAll: String { return self._s[2775]! } + public var Passport_PasswordCreate: String { return self._s[2776]! } + public var StickerSettings_MaskContextInfo: String { return self._s[2777]! } + public var Message_PinnedLocationMessage: String { return self._s[2778]! } + public var Map_Satellite: String { return self._s[2779]! } + public var Watch_Message_Unsupported: String { return self._s[2780]! } + public var Username_TooManyPublicUsernamesError: String { return self._s[2781]! } + public var TwoStepAuth_EnterPasswordInvalid: String { return self._s[2782]! } public func Notification_PinnedTextMessage(_ _0: String, _ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2784]!, self._r[2784]!, [_0, _1]) + return formatWithArgumentRanges(self._s[2783]!, self._r[2783]!, [_0, _1]) } - public var Notifications_ChannelNotificationsHelp: String { return self._s[2785]! } - public var Privacy_Calls_P2PContacts: String { return self._s[2786]! } - public var NotificationsSound_None: String { return self._s[2787]! } - public var AccessDenied_VoiceMicrophone: String { return self._s[2789]! } + public var Notifications_ChannelNotificationsHelp: String { return self._s[2784]! } + public var Privacy_Calls_P2PContacts: String { return self._s[2785]! } + public var NotificationsSound_None: String { return self._s[2786]! } + public var AccessDenied_VoiceMicrophone: String { return self._s[2788]! } public func ApplyLanguage_ChangeLanguageAlreadyActive(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2790]!, self._r[2790]!, [_1]) + return formatWithArgumentRanges(self._s[2789]!, self._r[2789]!, [_1]) } - public var Cache_Indexing: String { return self._s[2791]! } - public var DialogList_RecentTitlePeople: String { return self._s[2793]! } - public var DialogList_EncryptionRejected: String { return self._s[2794]! } - public var GroupInfo_Administrators: String { return self._s[2795]! } - public var Passport_ScanPassportHelp: String { return self._s[2796]! } - public var Application_Name: String { return self._s[2797]! } - public var Channel_AdminLogFilter_ChannelEventsInfo: String { return self._s[2798]! } - public var Passport_Identity_TranslationHelp: String { return self._s[2800]! } + public var Cache_Indexing: String { return self._s[2790]! } + public var DialogList_RecentTitlePeople: String { return self._s[2792]! } + public var DialogList_EncryptionRejected: String { return self._s[2793]! } + public var GroupInfo_Administrators: String { return self._s[2794]! } + public var Passport_ScanPassportHelp: String { return self._s[2795]! } + public var Application_Name: String { return self._s[2796]! } + public var Channel_AdminLogFilter_ChannelEventsInfo: String { return self._s[2797]! } + public var Passport_Identity_TranslationHelp: String { return self._s[2799]! } public func Notification_JoinedGroupByLink(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2801]!, self._r[2801]!, [_0]) + return formatWithArgumentRanges(self._s[2800]!, self._r[2800]!, [_0]) } public func DialogList_EncryptedChatStartedOutgoing(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2802]!, self._r[2802]!, [_0]) + return formatWithArgumentRanges(self._s[2801]!, self._r[2801]!, [_0]) } - public var Channel_EditAdmin_PermissionDeleteMessages: String { return self._s[2803]! } - public var Privacy_ChatsTitle: String { return self._s[2804]! } - public var DialogList_ClearHistoryConfirmation: String { return self._s[2805]! } - public var Watch_Suggestion_HoldOn: String { return self._s[2806]! } - public var SocksProxySetup_RequiredCredentials: String { return self._s[2807]! } - public var Passport_Address_TypeRentalAgreementUploadScan: String { return self._s[2808]! } - public var TwoStepAuth_EmailSkipAlert: String { return self._s[2809]! } - public var Channel_Setup_TypePublic: String { return self._s[2812]! } + public var Channel_EditAdmin_PermissionDeleteMessages: String { return self._s[2802]! } + public var Privacy_ChatsTitle: String { return self._s[2803]! } + public var DialogList_ClearHistoryConfirmation: String { return self._s[2804]! } + public var Watch_Suggestion_HoldOn: String { return self._s[2805]! } + public var SocksProxySetup_RequiredCredentials: String { return self._s[2806]! } + public var Passport_Address_TypeRentalAgreementUploadScan: String { return self._s[2807]! } + public var TwoStepAuth_EmailSkipAlert: String { return self._s[2808]! } + public var Channel_Setup_TypePublic: String { return self._s[2811]! } public func Channel_AdminLog_MessageToggleInvitesOn(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2813]!, self._r[2813]!, [_0]) + return formatWithArgumentRanges(self._s[2812]!, self._r[2812]!, [_0]) } - public var Channel_TypeSetup_Title: String { return self._s[2815]! } - public var Map_OpenInMaps: String { return self._s[2817]! } - public var NotificationsSound_Tremolo: String { return self._s[2819]! } + public var Channel_TypeSetup_Title: String { return self._s[2814]! } + public var Map_OpenInMaps: String { return self._s[2816]! } + public var NotificationsSound_Tremolo: String { return self._s[2818]! } public func Date_ChatDateHeaderYear(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2821]!, self._r[2821]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[2820]!, self._r[2820]!, [_1, _2, _3]) } - public var ConversationProfile_UnknownAddMemberError: String { return self._s[2822]! } - public var Passport_PasswordHelp: String { return self._s[2823]! } - public var Login_CodeExpiredError: String { return self._s[2824]! } - public var Channel_EditAdmin_PermissionChangeInfo: String { return self._s[2825]! } - public var Conversation_TitleUnmute: String { return self._s[2826]! } - public var Passport_Identity_ScansHelp: String { return self._s[2827]! } - public var Passport_Language_lo: String { return self._s[2828]! } - public var Camera_FlashAuto: String { return self._s[2829]! } - public var Common_Cancel: String { return self._s[2830]! } - public var DialogList_SavedMessagesTooltip: String { return self._s[2831]! } - public var TwoStepAuth_SetupPasswordTitle: String { return self._s[2832]! } - public var Conversation_ReportSpamConfirmation: String { return self._s[2833]! } - public var ChatSettings_Title: String { return self._s[2835]! } - public var Passport_PasswordReset: String { return self._s[2836]! } - public var SocksProxySetup_TypeNone: String { return self._s[2837]! } - public var PhoneNumberHelp_Help: String { return self._s[2839]! } - public var Checkout_EnterPassword: String { return self._s[2840]! } - public var Activity_UploadingDocument: String { return self._s[2842]! } - public var Share_AuthTitle: String { return self._s[2843]! } - public var State_Connecting: String { return self._s[2844]! } - public var Profile_MessageLifetime1w: String { return self._s[2845]! } - public var Conversation_ContextMenuReport: String { return self._s[2846]! } - public var CheckoutInfo_ReceiverInfoPhone: String { return self._s[2847]! } - public var AutoNightTheme_ScheduledTo: String { return self._s[2848]! } + public var ConversationProfile_UnknownAddMemberError: String { return self._s[2821]! } + public var Passport_PasswordHelp: String { return self._s[2822]! } + public var Login_CodeExpiredError: String { return self._s[2823]! } + public var Channel_EditAdmin_PermissionChangeInfo: String { return self._s[2824]! } + public var Conversation_TitleUnmute: String { return self._s[2825]! } + public var Passport_Identity_ScansHelp: String { return self._s[2826]! } + public var Passport_Language_lo: String { return self._s[2827]! } + public var Camera_FlashAuto: String { return self._s[2828]! } + public var Common_Cancel: String { return self._s[2829]! } + public var DialogList_SavedMessagesTooltip: String { return self._s[2830]! } + public var TwoStepAuth_SetupPasswordTitle: String { return self._s[2831]! } + public var Conversation_ReportSpamConfirmation: String { return self._s[2832]! } + public var ChatSettings_Title: String { return self._s[2834]! } + public var Passport_PasswordReset: String { return self._s[2835]! } + public var SocksProxySetup_TypeNone: String { return self._s[2836]! } + public var PhoneNumberHelp_Help: String { return self._s[2838]! } + public var Checkout_EnterPassword: String { return self._s[2839]! } + public var Activity_UploadingDocument: String { return self._s[2841]! } + public var Share_AuthTitle: String { return self._s[2842]! } + public var State_Connecting: String { return self._s[2843]! } + public var Profile_MessageLifetime1w: String { return self._s[2844]! } + public var Conversation_ContextMenuReport: String { return self._s[2845]! } + public var CheckoutInfo_ReceiverInfoPhone: String { return self._s[2846]! } + public var AutoNightTheme_ScheduledTo: String { return self._s[2847]! } public func CHAT_DELETE_MEMBER_SEPARATED(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2849]!, self._r[2849]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[2848]!, self._r[2848]!, [_1, _2, _3]) } - public var AuthSessions_Terminate: String { return self._s[2850]! } + public var AuthSessions_Terminate: String { return self._s[2849]! } public func MESSAGE_TEXT_SEPARATED(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2851]!, self._r[2851]!, [_1, _2]) + return formatWithArgumentRanges(self._s[2850]!, self._r[2850]!, [_1, _2]) } - public var Checkout_NewCard_CardholderNamePlaceholder: String { return self._s[2852]! } - public var KeyCommand_JumpToPreviousUnreadChat: String { return self._s[2853]! } - public var PhotoEditor_Set: String { return self._s[2854]! } - public var EmptyGroupInfo_Title: String { return self._s[2855]! } - public var Login_PadPhoneHelp: String { return self._s[2856]! } - public var PrivacyPolicy_DeclineLastWarning: String { return self._s[2859]! } - public var NotificationsSound_Complete: String { return self._s[2860]! } + public var Checkout_NewCard_CardholderNamePlaceholder: String { return self._s[2851]! } + public var KeyCommand_JumpToPreviousUnreadChat: String { return self._s[2852]! } + public var PhotoEditor_Set: String { return self._s[2853]! } + public var EmptyGroupInfo_Title: String { return self._s[2854]! } + public var Login_PadPhoneHelp: String { return self._s[2855]! } + public var PrivacyPolicy_DeclineLastWarning: String { return self._s[2858]! } + public var NotificationsSound_Complete: String { return self._s[2859]! } public func CHAT_MESSAGE_CONTACT_SEPARATED(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2861]!, self._r[2861]!, [_1, _2]) + return formatWithArgumentRanges(self._s[2860]!, self._r[2860]!, [_1, _2]) } - public var Group_Info_AdminLog: String { return self._s[2862]! } - public var GroupPermission_NotAvailableInPublicGroups: String { return self._s[2863]! } - public var Channel_AdminLog_InfoPanelAlertText: String { return self._s[2864]! } - public var Conversation_Admin: String { return self._s[2866]! } - public var Conversation_GifTooltip: String { return self._s[2867]! } - public var Passport_NotLoggedInMessage: String { return self._s[2868]! } - public var Profile_MessageLifetimeForever: String { return self._s[2869]! } + public var Group_Info_AdminLog: String { return self._s[2861]! } + public var GroupPermission_NotAvailableInPublicGroups: String { return self._s[2862]! } + public var Channel_AdminLog_InfoPanelAlertText: String { return self._s[2863]! } + public var Conversation_Admin: String { return self._s[2865]! } + public var Conversation_GifTooltip: String { return self._s[2866]! } + public var Passport_NotLoggedInMessage: String { return self._s[2867]! } + public var Profile_MessageLifetimeForever: String { return self._s[2868]! } public func MESSAGE_POLL_SEPARATED(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2871]!, self._r[2871]!, [_1]) + return formatWithArgumentRanges(self._s[2870]!, self._r[2870]!, [_1]) } - public var SharedMedia_EmptyTitle: String { return self._s[2872]! } - public var Channel_Edit_PrivatePublicLinkAlert: String { return self._s[2873]! } - public var Username_Help: String { return self._s[2874]! } - public var DialogList_LanguageTooltip: String { return self._s[2876]! } - public var Map_LoadError: String { return self._s[2877]! } - public var Channel_AdminLog_AddMembers: String { return self._s[2878]! } - public var Notification_Exceptions_NewException: String { return self._s[2879]! } - public var TwoStepAuth_EmailTitle: String { return self._s[2880]! } - public var WatchRemote_AlertText: String { return self._s[2881]! } - public var ChatSettings_ConnectionType_Title: String { return self._s[2883]! } + public var SharedMedia_EmptyTitle: String { return self._s[2871]! } + public var Channel_Edit_PrivatePublicLinkAlert: String { return self._s[2872]! } + public var Username_Help: String { return self._s[2873]! } + public var DialogList_LanguageTooltip: String { return self._s[2875]! } + public var Map_LoadError: String { return self._s[2876]! } + public var Channel_AdminLog_AddMembers: String { return self._s[2877]! } + public var Notification_Exceptions_NewException: String { return self._s[2878]! } + public var TwoStepAuth_EmailTitle: String { return self._s[2879]! } + public var WatchRemote_AlertText: String { return self._s[2880]! } + public var ChatSettings_ConnectionType_Title: String { return self._s[2882]! } public func CHANNEL_MESSAGE_GEOLIVE_SEPARATED(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2884]!, self._r[2884]!, [_1]) + return formatWithArgumentRanges(self._s[2883]!, self._r[2883]!, [_1]) } public func LOCKED_MESSAGE(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2885]!, self._r[2885]!, [_1]) + return formatWithArgumentRanges(self._s[2884]!, self._r[2884]!, [_1]) } - public var Passport_Address_CountryPlaceholder: String { return self._s[2886]! } + public var Passport_Address_CountryPlaceholder: String { return self._s[2885]! } public func DialogList_AwaitingEncryption(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2887]!, self._r[2887]!, [_0]) + return formatWithArgumentRanges(self._s[2886]!, self._r[2886]!, [_0]) } public func Time_PreciseDate_m6(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2888]!, self._r[2888]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[2887]!, self._r[2887]!, [_1, _2, _3]) } - public var Group_AdminLog_EmptyText: String { return self._s[2889]! } - public var AccessDenied_VideoMicrophone: String { return self._s[2891]! } - public var Conversation_ContextMenuStickerPackAdd: String { return self._s[2892]! } - public var Cache_ClearNone: String { return self._s[2893]! } - public var SocksProxySetup_FailedToConnect: String { return self._s[2894]! } - public var Permissions_NotificationsTitle_v0: String { return self._s[2895]! } + public var Group_AdminLog_EmptyText: String { return self._s[2888]! } + public var AccessDenied_VideoMicrophone: String { return self._s[2890]! } + public var Conversation_ContextMenuStickerPackAdd: String { return self._s[2891]! } + public var Cache_ClearNone: String { return self._s[2892]! } + public var SocksProxySetup_FailedToConnect: String { return self._s[2893]! } + public var Permissions_NotificationsTitle_v0: String { return self._s[2894]! } public func Channel_AdminLog_MessageEdited(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2896]!, self._r[2896]!, [_0]) + return formatWithArgumentRanges(self._s[2895]!, self._r[2895]!, [_0]) } - public var Passport_Identity_Country: String { return self._s[2897]! } + public var Passport_Identity_Country: String { return self._s[2896]! } public func Notification_CreatedChat(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2898]!, self._r[2898]!, [_0]) + return formatWithArgumentRanges(self._s[2897]!, self._r[2897]!, [_0]) } - public var AccessDenied_Settings: String { return self._s[2899]! } - public var Passport_Address_TypeUtilityBillUploadScan: String { return self._s[2900]! } - public var Month_ShortMay: String { return self._s[2901]! } - public var Compose_NewGroup: String { return self._s[2902]! } - public var Group_Setup_TypePrivate: String { return self._s[2904]! } - public var Login_PadPhoneHelpTitle: String { return self._s[2905]! } - public var Appearance_ThemeDayClassic: String { return self._s[2906]! } - public var Channel_AdminLog_MessagePreviousCaption: String { return self._s[2907]! } - public var Privacy_GroupsAndChannels_WhoCanAddMe: String { return self._s[2908]! } - public var Conversation_typing: String { return self._s[2910]! } - public var Paint_Masks: String { return self._s[2911]! } + public var AccessDenied_Settings: String { return self._s[2898]! } + public var Passport_Address_TypeUtilityBillUploadScan: String { return self._s[2899]! } + public var Month_ShortMay: String { return self._s[2900]! } + public var Compose_NewGroup: String { return self._s[2901]! } + public var Group_Setup_TypePrivate: String { return self._s[2903]! } + public var Login_PadPhoneHelpTitle: String { return self._s[2904]! } + public var Appearance_ThemeDayClassic: String { return self._s[2905]! } + public var Channel_AdminLog_MessagePreviousCaption: String { return self._s[2906]! } + public var Privacy_GroupsAndChannels_WhoCanAddMe: String { return self._s[2907]! } + public var Conversation_typing: String { return self._s[2909]! } + public var Paint_Masks: String { return self._s[2910]! } public func PINNED_DOC_SEPARATED(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2912]!, self._r[2912]!, [_1]) + return formatWithArgumentRanges(self._s[2911]!, self._r[2911]!, [_1]) } - public var Username_InvalidTaken: String { return self._s[2913]! } + public var Username_InvalidTaken: String { return self._s[2912]! } public func CHAT_PHOTO_EDITED(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2914]!, self._r[2914]!, [_1, _2]) + return formatWithArgumentRanges(self._s[2913]!, self._r[2913]!, [_1, _2]) } - public var Call_StatusNoAnswer: String { return self._s[2915]! } - public var TwoStepAuth_EmailAddSuccess: String { return self._s[2916]! } - public var Passport_Identity_Selfie: String { return self._s[2917]! } - public var Login_InfoLastNamePlaceholder: String { return self._s[2918]! } - public var Privacy_SecretChatsLinkPreviewsHelp: String { return self._s[2919]! } - public var Conversation_ClearSecretHistory: String { return self._s[2920]! } - public var NetworkUsageSettings_Title: String { return self._s[2922]! } - public var Your_cards_security_code_is_invalid: String { return self._s[2924]! } + public var Call_StatusNoAnswer: String { return self._s[2914]! } + public var TwoStepAuth_EmailAddSuccess: String { return self._s[2915]! } + public var Passport_Identity_Selfie: String { return self._s[2916]! } + public var Login_InfoLastNamePlaceholder: String { return self._s[2917]! } + public var Privacy_SecretChatsLinkPreviewsHelp: String { return self._s[2918]! } + public var Conversation_ClearSecretHistory: String { return self._s[2919]! } + public var NetworkUsageSettings_Title: String { return self._s[2921]! } + public var Your_cards_security_code_is_invalid: String { return self._s[2923]! } public func Notification_LeftChannel(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2926]!, self._r[2926]!, [_0]) + return formatWithArgumentRanges(self._s[2925]!, self._r[2925]!, [_0]) } public func Call_CallInProgressMessage(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2927]!, self._r[2927]!, [_1, _2]) + return formatWithArgumentRanges(self._s[2926]!, self._r[2926]!, [_1, _2]) } - public var SaveIncomingPhotosSettings_From: String { return self._s[2929]! } - public var Map_LiveLocationTitle: String { return self._s[2930]! } - public var Login_InfoAvatarAdd: String { return self._s[2931]! } - public var Passport_Identity_FilesView: String { return self._s[2932]! } - public var UserInfo_GenericPhoneLabel: String { return self._s[2933]! } - public var Privacy_Calls_NeverAllow: String { return self._s[2934]! } + public var SaveIncomingPhotosSettings_From: String { return self._s[2928]! } + public var Map_LiveLocationTitle: String { return self._s[2929]! } + public var Login_InfoAvatarAdd: String { return self._s[2930]! } + public var Passport_Identity_FilesView: String { return self._s[2931]! } + public var UserInfo_GenericPhoneLabel: String { return self._s[2932]! } + public var Privacy_Calls_NeverAllow: String { return self._s[2933]! } public func Contacts_AddPhoneNumber(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2935]!, self._r[2935]!, [_0]) + return formatWithArgumentRanges(self._s[2934]!, self._r[2934]!, [_0]) } - public var TwoStepAuth_ConfirmationText: String { return self._s[2936]! } - public var ChatSettings_AutomaticVideoMessageDownload: String { return self._s[2937]! } - public var Channel_AdminLogFilter_AdminsAll: String { return self._s[2938]! } - public var Tour_Title2: String { return self._s[2939]! } - public var Conversation_FileOpenIn: String { return self._s[2940]! } - public var Checkout_ErrorPrecheckoutFailed: String { return self._s[2941]! } - public var Wallpaper_Set: String { return self._s[2942]! } - public var Passport_Identity_Translations: String { return self._s[2944]! } + public var TwoStepAuth_ConfirmationText: String { return self._s[2935]! } + public var ChatSettings_AutomaticVideoMessageDownload: String { return self._s[2936]! } + public var Channel_AdminLogFilter_AdminsAll: String { return self._s[2937]! } + public var Tour_Title2: String { return self._s[2938]! } + public var Conversation_FileOpenIn: String { return self._s[2939]! } + public var Checkout_ErrorPrecheckoutFailed: String { return self._s[2940]! } + public var Wallpaper_Set: String { return self._s[2941]! } + public var Passport_Identity_Translations: String { return self._s[2943]! } public func Channel_AdminLog_MessageChangedChannelAbout(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2945]!, self._r[2945]!, [_0]) + return formatWithArgumentRanges(self._s[2944]!, self._r[2944]!, [_0]) } - public var Channel_LeaveChannel: String { return self._s[2946]! } + public var Channel_LeaveChannel: String { return self._s[2945]! } public func MESSAGE_NOTEXT_SEPARATED(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2947]!, self._r[2947]!, [_1]) + return formatWithArgumentRanges(self._s[2946]!, self._r[2946]!, [_1]) } public func PINNED_INVOICE(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2948]!, self._r[2948]!, [_1]) + return formatWithArgumentRanges(self._s[2947]!, self._r[2947]!, [_1]) } - public var PhotoEditor_HighlightsTint: String { return self._s[2949]! } - public var Passport_Email_Delete: String { return self._s[2950]! } - public var Conversation_Mute: String { return self._s[2952]! } - public var Channel_AdminLog_CanSendMessages: String { return self._s[2954]! } + public var PhotoEditor_HighlightsTint: String { return self._s[2948]! } + public var Passport_Email_Delete: String { return self._s[2949]! } + public var Conversation_Mute: String { return self._s[2951]! } + public var Channel_AdminLog_CanSendMessages: String { return self._s[2953]! } public func Notification_PassportValuesSentMessage(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2955]!, self._r[2955]!, [_1, _2]) + return formatWithArgumentRanges(self._s[2954]!, self._r[2954]!, [_1, _2]) } - public var Calls_CallTabDescription: String { return self._s[2956]! } - public var Passport_Identity_NativeNameHelp: String { return self._s[2957]! } - public var Common_No: String { return self._s[2958]! } - public var Weekday_Sunday: String { return self._s[2959]! } - public var Notification_Reply: String { return self._s[2960]! } - public var Conversation_ViewMessage: String { return self._s[2961]! } + public var Calls_CallTabDescription: String { return self._s[2955]! } + public var Passport_Identity_NativeNameHelp: String { return self._s[2956]! } + public var Common_No: String { return self._s[2957]! } + public var Weekday_Sunday: String { return self._s[2958]! } + public var Notification_Reply: String { return self._s[2959]! } + public var Conversation_ViewMessage: String { return self._s[2960]! } public func Checkout_SavePasswordTimeoutAndFaceId(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2962]!, self._r[2962]!, [_0]) + return formatWithArgumentRanges(self._s[2961]!, self._r[2961]!, [_0]) } public func Map_LiveLocationPrivateDescription(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2963]!, self._r[2963]!, [_0]) + return formatWithArgumentRanges(self._s[2962]!, self._r[2962]!, [_0]) } - public var Message_PinnedDocumentMessage: String { return self._s[2964]! } - public var DialogList_TabTitle: String { return self._s[2966]! } - public var Passport_FieldEmail: String { return self._s[2967]! } - public var Conversation_UnpinMessageAlert: String { return self._s[2968]! } - public var Passport_Address_TypeBankStatement: String { return self._s[2969]! } - public var Passport_Identity_ExpiryDate: String { return self._s[2970]! } - public var Privacy_Calls_P2P: String { return self._s[2971]! } + public var Message_PinnedDocumentMessage: String { return self._s[2963]! } + public var DialogList_TabTitle: String { return self._s[2965]! } + public var Passport_FieldEmail: String { return self._s[2966]! } + public var Conversation_UnpinMessageAlert: String { return self._s[2967]! } + public var Passport_Address_TypeBankStatement: String { return self._s[2968]! } + public var Passport_Identity_ExpiryDate: String { return self._s[2969]! } + public var Privacy_Calls_P2P: String { return self._s[2970]! } public func CancelResetAccount_Success(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2973]!, self._r[2973]!, [_0]) + return formatWithArgumentRanges(self._s[2972]!, self._r[2972]!, [_0]) } - public var SocksProxySetup_UseForCallsHelp: String { return self._s[2974]! } - public var EnterPasscode_ChangeTitle: String { return self._s[2975]! } - public var Passport_InfoText: String { return self._s[2976]! } - public var Checkout_NewCard_SaveInfoEnableHelp: String { return self._s[2977]! } + public var SocksProxySetup_UseForCallsHelp: String { return self._s[2973]! } + public var EnterPasscode_ChangeTitle: String { return self._s[2974]! } + public var Passport_InfoText: String { return self._s[2975]! } + public var Checkout_NewCard_SaveInfoEnableHelp: String { return self._s[2976]! } public func Login_InvalidPhoneEmailSubject(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2978]!, self._r[2978]!, [_0]) + return formatWithArgumentRanges(self._s[2977]!, self._r[2977]!, [_0]) } public func Time_PreciseDate_m3(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2979]!, self._r[2979]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[2978]!, self._r[2978]!, [_1, _2, _3]) } - public var Passport_Identity_EditDriversLicense: String { return self._s[2980]! } - public var Conversation_TapAndHoldToRecord: String { return self._s[2982]! } + public var Passport_Identity_EditDriversLicense: String { return self._s[2979]! } + public var Conversation_TapAndHoldToRecord: String { return self._s[2981]! } public func Notification_CallTimeFormat(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2983]!, self._r[2983]!, [_1, _2]) + return formatWithArgumentRanges(self._s[2982]!, self._r[2982]!, [_1, _2]) } public func MESSAGE_ROUND_SEPARATED(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2984]!, self._r[2984]!, [_1]) + return formatWithArgumentRanges(self._s[2983]!, self._r[2983]!, [_1]) } public func PHONE_CALL_MISSED_SEPARATED(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2986]!, self._r[2986]!, [_1]) + return formatWithArgumentRanges(self._s[2985]!, self._r[2985]!, [_1]) } public func Generic_OpenHiddenLinkAlert(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2988]!, self._r[2988]!, [_0]) + return formatWithArgumentRanges(self._s[2987]!, self._r[2987]!, [_0]) } - public var DialogList_Unread: String { return self._s[2989]! } - public var User_DeletedAccount: String { return self._s[2990]! } + public var DialogList_Unread: String { return self._s[2988]! } + public var User_DeletedAccount: String { return self._s[2989]! } public func Watch_Time_ShortYesterdayAt(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2991]!, self._r[2991]!, [_0]) + return formatWithArgumentRanges(self._s[2990]!, self._r[2990]!, [_0]) } - public var UserInfo_NotificationsDefault: String { return self._s[2992]! } - public var SharedMedia_CategoryMedia: String { return self._s[2993]! } - public var SocksProxySetup_ProxyStatusUnavailable: String { return self._s[2994]! } - public var Channel_AdminLog_MessageRestrictedForever: String { return self._s[2995]! } - public var Watch_ChatList_Compose: String { return self._s[2996]! } - public var Notifications_MessageNotificationsExceptionsHelp: String { return self._s[2997]! } - public var Watch_Microphone_Access: String { return self._s[2998]! } - public var Group_Setup_HistoryHeader: String { return self._s[2999]! } - public var Activity_UploadingPhoto: String { return self._s[3000]! } + public var UserInfo_NotificationsDefault: String { return self._s[2991]! } + public var SharedMedia_CategoryMedia: String { return self._s[2992]! } + public var SocksProxySetup_ProxyStatusUnavailable: String { return self._s[2993]! } + public var Channel_AdminLog_MessageRestrictedForever: String { return self._s[2994]! } + public var Watch_ChatList_Compose: String { return self._s[2995]! } + public var Notifications_MessageNotificationsExceptionsHelp: String { return self._s[2996]! } + public var Watch_Microphone_Access: String { return self._s[2997]! } + public var Group_Setup_HistoryHeader: String { return self._s[2998]! } + public var Activity_UploadingPhoto: String { return self._s[2999]! } public func MESSAGE_VIDEO_SECRET_SEPARATED(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3002]!, self._r[3002]!, [_1]) + return formatWithArgumentRanges(self._s[3001]!, self._r[3001]!, [_1]) } - public var Conversation_Edit: String { return self._s[3003]! } - public var Group_ErrorSendRestrictedMedia: String { return self._s[3004]! } - public var Login_TermsOfServiceDecline: String { return self._s[3005]! } - public var Message_PinnedContactMessage: String { return self._s[3006]! } + public var Conversation_Edit: String { return self._s[3002]! } + public var Group_ErrorSendRestrictedMedia: String { return self._s[3003]! } + public var Login_TermsOfServiceDecline: String { return self._s[3004]! } + public var Message_PinnedContactMessage: String { return self._s[3005]! } public func Channel_AdminLog_MessageRestrictedNameUsername(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3007]!, self._r[3007]!, [_1, _2]) + return formatWithArgumentRanges(self._s[3006]!, self._r[3006]!, [_1, _2]) } public func Login_PhoneBannedEmailBody(_ _1: String, _ _2: String, _ _3: String, _ _4: String, _ _5: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3008]!, self._r[3008]!, [_1, _2, _3, _4, _5]) + return formatWithArgumentRanges(self._s[3007]!, self._r[3007]!, [_1, _2, _3, _4, _5]) } - public var TwoStepAuth_AdditionalPassword: String { return self._s[3010]! } - public var Passport_Phone_EnterOtherNumber: String { return self._s[3011]! } - public var Message_PinnedPhotoMessage: String { return self._s[3012]! } - public var Passport_FieldPhone: String { return self._s[3013]! } - public var TwoStepAuth_RecoveryEmailAddDescription: String { return self._s[3014]! } - public var InfoPlist_NSCameraUsageDescription: String { return self._s[3016]! } - public var Conversation_Call: String { return self._s[3017]! } - public var Common_TakePhoto: String { return self._s[3019]! } - public var Channel_NotificationLoading: String { return self._s[3020]! } + public var TwoStepAuth_AdditionalPassword: String { return self._s[3009]! } + public var Passport_Phone_EnterOtherNumber: String { return self._s[3010]! } + public var Message_PinnedPhotoMessage: String { return self._s[3011]! } + public var Passport_FieldPhone: String { return self._s[3012]! } + public var TwoStepAuth_RecoveryEmailAddDescription: String { return self._s[3013]! } + public var InfoPlist_NSCameraUsageDescription: String { return self._s[3015]! } + public var Conversation_Call: String { return self._s[3016]! } + public var Common_TakePhoto: String { return self._s[3018]! } + public var Channel_NotificationLoading: String { return self._s[3019]! } public func Notification_Exceptions_Sound(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3021]!, self._r[3021]!, [_0]) + return formatWithArgumentRanges(self._s[3020]!, self._r[3020]!, [_0]) } - public var Permissions_SiriTitle_v0: String { return self._s[3022]! } + public var Permissions_SiriTitle_v0: String { return self._s[3021]! } public func Login_ResetAccountProtected_Text(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3023]!, self._r[3023]!, [_0]) + return formatWithArgumentRanges(self._s[3022]!, self._r[3022]!, [_0]) } - public var Channel_MessagePhotoRemoved: String { return self._s[3024]! } - public var Common_edit: String { return self._s[3025]! } - public var PrivacySettings_AuthSessions: String { return self._s[3026]! } - public var Month_ShortJune: String { return self._s[3027]! } - public var PrivacyLastSeenSettings_AlwaysShareWith_Placeholder: String { return self._s[3028]! } - public var Call_ReportSend: String { return self._s[3029]! } - public var Watch_LastSeen_JustNow: String { return self._s[3030]! } - public var Notifications_MessageNotifications: String { return self._s[3031]! } - public var BroadcastListInfo_AddRecipient: String { return self._s[3033]! } - public var Group_Status: String { return self._s[3034]! } + public var Channel_MessagePhotoRemoved: String { return self._s[3023]! } + public var Common_edit: String { return self._s[3024]! } + public var PrivacySettings_AuthSessions: String { return self._s[3025]! } + public var Month_ShortJune: String { return self._s[3026]! } + public var PrivacyLastSeenSettings_AlwaysShareWith_Placeholder: String { return self._s[3027]! } + public var Call_ReportSend: String { return self._s[3028]! } + public var Watch_LastSeen_JustNow: String { return self._s[3029]! } + public var Notifications_MessageNotifications: String { return self._s[3030]! } + public var BroadcastListInfo_AddRecipient: String { return self._s[3032]! } + public var Group_Status: String { return self._s[3033]! } public func AutoNightTheme_LocationHelp(_ _0: String, _ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3035]!, self._r[3035]!, [_0, _1]) + return formatWithArgumentRanges(self._s[3034]!, self._r[3034]!, [_0, _1]) } - public var ShareMenu_ShareTo: String { return self._s[3036]! } - public var Conversation_Moderate_Ban: String { return self._s[3037]! } + public var ShareMenu_ShareTo: String { return self._s[3035]! } + public var Conversation_Moderate_Ban: String { return self._s[3036]! } public func Conversation_DeleteMessagesFor(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3038]!, self._r[3038]!, [_0]) + return formatWithArgumentRanges(self._s[3037]!, self._r[3037]!, [_0]) } - public var SharedMedia_ViewInChat: String { return self._s[3039]! } - public var Map_LiveLocationFor8Hours: String { return self._s[3040]! } + public var SharedMedia_ViewInChat: String { return self._s[3038]! } + public var Map_LiveLocationFor8Hours: String { return self._s[3039]! } public func Map_AccurateTo(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3042]!, self._r[3042]!, [_0]) + return formatWithArgumentRanges(self._s[3041]!, self._r[3041]!, [_0]) } - public var Appearance_ReduceMotion: String { return self._s[3043]! } - public var Map_OpenInHereMaps: String { return self._s[3044]! } - public var Channel_Setup_TypePublicHelp: String { return self._s[3045]! } - public var Passport_Identity_EditInternalPassport: String { return self._s[3046]! } - public var PhotoEditor_Skip: String { return self._s[3047]! } - public func MessageTimer_ShortMinutes(_ value: Int32) -> String { + public var Appearance_ReduceMotion: String { return self._s[3042]! } + public var Map_OpenInHereMaps: String { return self._s[3043]! } + public var Channel_Setup_TypePublicHelp: String { return self._s[3044]! } + public var Passport_Identity_EditInternalPassport: String { return self._s[3045]! } + public var PhotoEditor_Skip: String { return self._s[3046]! } + public func MESSAGES_SEPARATED(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[0 * 6 + Int(form.rawValue)]!, "\(value)") } - public func Notification_GameScoreExtended(_ value: Int32) -> String { + public func MessagePoll_VotedCount(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[1 * 6 + Int(form.rawValue)]!, "\(value)") } - public func Conversation_StatusMembers(_ value: Int32) -> String { + public func Notification_GameScoreSimple(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[2 * 6 + Int(form.rawValue)]!, "\(value)") } - public func SharedMedia_DeleteItemsConfirmation(_ value: Int32) -> String { + public func MessageTimer_ShortHours(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[3 * 6 + Int(form.rawValue)]!, "\(value)") } @@ -3573,379 +3572,379 @@ public final class PresentationStrings { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[4 * 6 + Int(form.rawValue)]!, "\(value)") } - public func Watch_LastSeen_MinutesAgo(_ value: Int32) -> String { + public func MuteFor_Days(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[5 * 6 + Int(form.rawValue)]!, "\(value)") } - public func Notifications_ExceptionMuteExpires_Days(_ value: Int32) -> String { + public func LastSeen_MinutesAgo(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[6 * 6 + Int(form.rawValue)]!, "\(value)") } - public func AttachmentMenu_SendVideo(_ value: Int32) -> String { + public func Conversation_LiveLocationMembersCount(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[7 * 6 + Int(form.rawValue)]!, "\(value)") } - public func Notifications_ExceptionMuteExpires_Hours(_ value: Int32) -> String { + public func Media_SharePhoto(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[8 * 6 + Int(form.rawValue)]!, "\(value)") } - public func Notifications_Exceptions(_ value: Int32) -> String { + public func CHAT_MESSAGES_SEPARATED(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[9 * 6 + Int(form.rawValue)]!, "\(value)") } - public func Contacts_ImportersCount(_ value: Int32) -> String { + public func Notifications_Exceptions(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[10 * 6 + Int(form.rawValue)]!, "\(value)") } - public func MessageTimer_Hours(_ value: Int32) -> String { + public func AttachmentMenu_SendPhoto(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[11 * 6 + Int(form.rawValue)]!, "\(value)") } - public func MessageTimer_Minutes(_ value: Int32) -> String { + public func UserCount(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[12 * 6 + Int(form.rawValue)]!, "\(value)") } - public func ForwardedMessages(_ value: Int32) -> String { + public func StickerPack_StickerCount(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[13 * 6 + Int(form.rawValue)]!, "\(value)") } - public func ForwardedPolls(_ value: Int32) -> String { + public func ForwardedVideoMessages(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[14 * 6 + Int(form.rawValue)]!, "\(value)") } - public func PrivacyLastSeenSettings_AddUsers(_ value: Int32) -> String { + public func LiveLocationUpdated_MinutesAgo(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[15 * 6 + Int(form.rawValue)]!, "\(value)") } - public func CHANNEL_MESSAGES_SEPARATED(_ value: Int32) -> String { + public func MessageTimer_ShortWeeks(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[16 * 6 + Int(form.rawValue)]!, "\(value)") } - public func MessagePoll_VotedCount(_ value: Int32) -> String { + public func Call_Seconds(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[17 * 6 + Int(form.rawValue)]!, "\(value)") } - public func StickerPack_RemoveStickerCount(_ value: Int32) -> String { + public func Watch_LastSeen_MinutesAgo(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[18 * 6 + Int(form.rawValue)]!, "\(value)") } - public func InviteText_ContactsCountText(_ value: Int32) -> String { + public func CHANNEL_MESSAGE_FWDS_SEPARATED(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[19 * 6 + Int(form.rawValue)]!, "\(value)") } - public func CHAT_MESSAGE_PHOTOS_SEPARATED(_ value: Int32) -> String { + public func ForwardedFiles(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[20 * 6 + Int(form.rawValue)]!, "\(value)") } - public func Watch_LastSeen_HoursAgo(_ value: Int32) -> String { + public func StickerPack_AddStickerCount(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[21 * 6 + Int(form.rawValue)]!, "\(value)") } - public func ForwardedVideos(_ value: Int32) -> String { + public func Conversation_StatusSubscribers(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[22 * 6 + Int(form.rawValue)]!, "\(value)") } - public func CreatePoll_AddMoreOptions(_ value: Int32) -> String { + public func ForwardedLocations(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[23 * 6 + Int(form.rawValue)]!, "\(value)") } - public func AttachmentMenu_SendGif(_ value: Int32) -> String { + public func Notification_GameScoreExtended(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[24 * 6 + Int(form.rawValue)]!, "\(value)") } - public func MuteFor_Days(_ value: Int32) -> String { + public func DialogList_LiveLocationChatsCount(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[25 * 6 + Int(form.rawValue)]!, "\(value)") } - public func UserCount(_ value: Int32) -> String { + public func MessageTimer_Months(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[26 * 6 + Int(form.rawValue)]!, "\(value)") } - public func Notification_GameScoreSimple(_ value: Int32) -> String { + public func LastSeen_HoursAgo(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[27 * 6 + Int(form.rawValue)]!, "\(value)") } - public func MESSAGE_PHOTOS_SEPARATED(_ value: Int32) -> String { + public func Watch_LastSeen_HoursAgo(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[28 * 6 + Int(form.rawValue)]!, "\(value)") } - public func Call_ShortMinutes(_ value: Int32) -> String { + public func MessageTimer_ShortSeconds(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[29 * 6 + Int(form.rawValue)]!, "\(value)") } - public func ForwardedAuthorsOthers(_ value: Int32) -> String { + public func ForwardedAudios(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[30 * 6 + Int(form.rawValue)]!, "\(value)") } - public func CHAT_MESSAGE_FWDS_SEPARATED(_ value: Int32) -> String { + public func ForwardedMessages(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[31 * 6 + Int(form.rawValue)]!, "\(value)") } - public func ForwardedGifs(_ value: Int32) -> String { + public func ServiceMessage_GameScoreSimple(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[32 * 6 + Int(form.rawValue)]!, "\(value)") } - public func Notifications_ExceptionMuteExpires_Minutes(_ value: Int32) -> String { + public func ForwardedStickers(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[33 * 6 + Int(form.rawValue)]!, "\(value)") } - public func SharedMedia_Photo(_ value: Int32) -> String { + public func Conversation_StatusMembers(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[34 * 6 + Int(form.rawValue)]!, "\(value)") } - public func SharedMedia_File(_ value: Int32) -> String { + public func ForwardedPolls(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[35 * 6 + Int(form.rawValue)]!, "\(value)") } - public func SharedMedia_Generic(_ value: Int32) -> String { + public func Call_ShortMinutes(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[36 * 6 + Int(form.rawValue)]!, "\(value)") } - public func MessageTimer_ShortWeeks(_ value: Int32) -> String { + public func MessageTimer_ShortMinutes(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[37 * 6 + Int(form.rawValue)]!, "\(value)") } - public func Call_Seconds(_ value: Int32) -> String { + public func SharedMedia_DeleteItemsConfirmation(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[38 * 6 + Int(form.rawValue)]!, "\(value)") } - public func ForwardedAudios(_ value: Int32) -> String { + public func CreatePoll_AddMoreOptions(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[39 * 6 + Int(form.rawValue)]!, "\(value)") } - public func SharedMedia_Video(_ value: Int32) -> String { + public func Map_ETAHours(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[40 * 6 + Int(form.rawValue)]!, "\(value)") } - public func Forward_ConfirmMultipleFiles(_ value: Int32) -> String { + public func Call_Minutes(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[41 * 6 + Int(form.rawValue)]!, "\(value)") } - public func Call_ShortSeconds(_ value: Int32) -> String { + public func MessageTimer_ShortDays(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[42 * 6 + Int(form.rawValue)]!, "\(value)") } - public func MessageTimer_Weeks(_ value: Int32) -> String { + public func Forward_ConfirmMultipleFiles(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[43 * 6 + Int(form.rawValue)]!, "\(value)") } - public func AttachmentMenu_SendItem(_ value: Int32) -> String { + public func ServiceMessage_GameScoreExtended(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[44 * 6 + Int(form.rawValue)]!, "\(value)") } - public func Conversation_LiveLocationMembersCount(_ value: Int32) -> String { + public func PrivacyLastSeenSettings_AddUsers(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[45 * 6 + Int(form.rawValue)]!, "\(value)") } - public func Notification_GameScoreSelfExtended(_ value: Int32) -> String { + public func AttachmentMenu_SendVideo(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[46 * 6 + Int(form.rawValue)]!, "\(value)") } - public func CHAT_MESSAGES_SEPARATED(_ value: Int32) -> String { + public func Call_ShortSeconds(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[47 * 6 + Int(form.rawValue)]!, "\(value)") } - public func SharedMedia_Link(_ value: Int32) -> String { + public func SharedMedia_File(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[48 * 6 + Int(form.rawValue)]!, "\(value)") } - public func ForwardedVideoMessages(_ value: Int32) -> String { + public func CHAT_MESSAGE_FWDS_SEPARATED(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[49 * 6 + Int(form.rawValue)]!, "\(value)") } - public func ServiceMessage_GameScoreSelfSimple(_ value: Int32) -> String { + public func InviteText_ContactsCountText(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[50 * 6 + Int(form.rawValue)]!, "\(value)") } - public func MESSAGE_FWDS_SEPARATED(_ value: Int32) -> String { + public func Notifications_ExceptionMuteExpires_Minutes(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[51 * 6 + Int(form.rawValue)]!, "\(value)") } - public func Map_ETAMinutes(_ value: Int32) -> String { + public func Contacts_ImportersCount(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[52 * 6 + Int(form.rawValue)]!, "\(value)") } - public func LastSeen_MinutesAgo(_ value: Int32) -> String { + public func ServiceMessage_GameScoreSelfSimple(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[53 * 6 + Int(form.rawValue)]!, "\(value)") } - public func MessageTimer_ShortHours(_ value: Int32) -> String { + public func PasscodeSettings_FailedAttempts(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[54 * 6 + Int(form.rawValue)]!, "\(value)") } - public func Conversation_StatusSubscribers(_ value: Int32) -> String { + public func MessageTimer_Hours(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[55 * 6 + Int(form.rawValue)]!, "\(value)") } - public func AttachmentMenu_SendPhoto(_ value: Int32) -> String { + public func Passport_Scans(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[56 * 6 + Int(form.rawValue)]!, "\(value)") } - public func MuteExpires_Days(_ value: Int32) -> String { + public func SharedMedia_Video(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[57 * 6 + Int(form.rawValue)]!, "\(value)") } - public func ChatList_DeleteConfirmation(_ value: Int32) -> String { + public func CHANNEL_MESSAGES_SEPARATED(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[58 * 6 + Int(form.rawValue)]!, "\(value)") } - public func ForwardedPhotos(_ value: Int32) -> String { + public func ForwardedVideos(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[59 * 6 + Int(form.rawValue)]!, "\(value)") } - public func LiveLocation_MenuChatsCount(_ value: Int32) -> String { + public func MessageTimer_Years(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[60 * 6 + Int(form.rawValue)]!, "\(value)") } - public func DialogList_LiveLocationChatsCount(_ value: Int32) -> String { + public func Notifications_ExceptionMuteExpires_Hours(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[61 * 6 + Int(form.rawValue)]!, "\(value)") } - public func ServiceMessage_GameScoreSelfExtended(_ value: Int32) -> String { + public func Notification_GameScoreSelfSimple(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[62 * 6 + Int(form.rawValue)]!, "\(value)") } - public func Media_ShareItem(_ value: Int32) -> String { + public func MessageTimer_Minutes(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[63 * 6 + Int(form.rawValue)]!, "\(value)") } - public func Passport_Scans(_ value: Int32) -> String { + public func Media_ShareVideo(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[64 * 6 + Int(form.rawValue)]!, "\(value)") } - public func ForwardedLocations(_ value: Int32) -> String { + public func StickerPack_RemoveStickerCount(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[65 * 6 + Int(form.rawValue)]!, "\(value)") } - public func MessageTimer_ShortDays(_ value: Int32) -> String { + public func MESSAGE_FWDS_SEPARATED(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[66 * 6 + Int(form.rawValue)]!, "\(value)") } - public func CHANNEL_MESSAGE_FWDS_SEPARATED(_ value: Int32) -> String { + public func Notification_GameScoreSelfExtended(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[67 * 6 + Int(form.rawValue)]!, "\(value)") } - public func StickerPack_RemoveMaskCount(_ value: Int32) -> String { + public func Media_ShareItem(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[68 * 6 + Int(form.rawValue)]!, "\(value)") } - public func GroupInfo_ParticipantCount(_ value: Int32) -> String { + public func ForwardedAuthorsOthers(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[69 * 6 + Int(form.rawValue)]!, "\(value)") } - public func Map_ETAHours(_ value: Int32) -> String { + public func Watch_UserInfo_Mute(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[70 * 6 + Int(form.rawValue)]!, "\(value)") } - public func CHANNEL_MESSAGE_PHOTOS_SEPARATED(_ value: Int32) -> String { + public func MessageTimer_Seconds(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[71 * 6 + Int(form.rawValue)]!, "\(value)") } - public func ForwardedFiles(_ value: Int32) -> String { + public func Conversation_StatusOnline(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[72 * 6 + Int(form.rawValue)]!, "\(value)") } - public func StickerPack_StickerCount(_ value: Int32) -> String { + public func ChatList_DeleteConfirmation(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[73 * 6 + Int(form.rawValue)]!, "\(value)") } - public func Conversation_StatusOnline(_ value: Int32) -> String { + public func GroupInfo_ParticipantCount(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[74 * 6 + Int(form.rawValue)]!, "\(value)") } - public func QuickSend_Photos(_ value: Int32) -> String { + public func ForwardedContacts(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[75 * 6 + Int(form.rawValue)]!, "\(value)") } - public func Invitation_Members(_ value: Int32) -> String { + public func QuickSend_Photos(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[76 * 6 + Int(form.rawValue)]!, "\(value)") } - public func Notification_GameScoreSelfSimple(_ value: Int32) -> String { + public func StickerPack_AddMaskCount(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[77 * 6 + Int(form.rawValue)]!, "\(value)") } - public func MessageTimer_Days(_ value: Int32) -> String { + public func MuteExpires_Minutes(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[78 * 6 + Int(form.rawValue)]!, "\(value)") } - public func ForwardedStickers(_ value: Int32) -> String { + public func ForwardedPhotos(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[79 * 6 + Int(form.rawValue)]!, "\(value)") } - public func MuteFor_Hours(_ value: Int32) -> String { + public func MuteExpires_Days(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[80 * 6 + Int(form.rawValue)]!, "\(value)") } - public func Media_SharePhoto(_ value: Int32) -> String { + public func AttachmentMenu_SendGif(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[81 * 6 + Int(form.rawValue)]!, "\(value)") } - public func MessageTimer_Years(_ value: Int32) -> String { + public func MuteFor_Hours(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[82 * 6 + Int(form.rawValue)]!, "\(value)") } - public func MuteExpires_Minutes(_ value: Int32) -> String { + public func SharedMedia_Photo(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[83 * 6 + Int(form.rawValue)]!, "\(value)") } - public func Call_Minutes(_ value: Int32) -> String { + public func ForwardedGifs(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[84 * 6 + Int(form.rawValue)]!, "\(value)") } - public func LiveLocationUpdated_MinutesAgo(_ value: Int32) -> String { + public func ServiceMessage_GameScoreSelfExtended(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[85 * 6 + Int(form.rawValue)]!, "\(value)") } - public func PasscodeSettings_FailedAttempts(_ value: Int32) -> String { + public func MessageTimer_Weeks(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[86 * 6 + Int(form.rawValue)]!, "\(value)") } - public func StickerPack_AddStickerCount(_ value: Int32) -> String { + public func MessageTimer_Days(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[87 * 6 + Int(form.rawValue)]!, "\(value)") } - public func ServiceMessage_GameScoreSimple(_ value: Int32) -> String { + public func Notifications_ExceptionMuteExpires_Days(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[88 * 6 + Int(form.rawValue)]!, "\(value)") } - public func MessageTimer_Months(_ value: Int32) -> String { + public func SharedMedia_Generic(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[89 * 6 + Int(form.rawValue)]!, "\(value)") } - public func ForwardedContacts(_ value: Int32) -> String { + public func Invitation_Members(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[90 * 6 + Int(form.rawValue)]!, "\(value)") } - public func StickerPack_AddMaskCount(_ value: Int32) -> String { + public func StickerPack_RemoveMaskCount(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[91 * 6 + Int(form.rawValue)]!, "\(value)") } - public func Media_ShareVideo(_ value: Int32) -> String { + public func AttachmentMenu_SendItem(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[92 * 6 + Int(form.rawValue)]!, "\(value)") } - public func ServiceMessage_GameScoreExtended(_ value: Int32) -> String { + public func LiveLocation_MenuChatsCount(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[93 * 6 + Int(form.rawValue)]!, "\(value)") } - public func LastSeen_HoursAgo(_ value: Int32) -> String { + public func CHANNEL_MESSAGE_PHOTOS_SEPARATED(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[94 * 6 + Int(form.rawValue)]!, "\(value)") } - public func MessageTimer_Seconds(_ value: Int32) -> String { + public func Map_ETAMinutes(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[95 * 6 + Int(form.rawValue)]!, "\(value)") } - public func MESSAGES_SEPARATED(_ value: Int32) -> String { + public func SharedMedia_Link(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[96 * 6 + Int(form.rawValue)]!, "\(value)") } - public func Watch_UserInfo_Mute(_ value: Int32) -> String { + public func MESSAGE_PHOTOS_SEPARATED(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[97 * 6 + Int(form.rawValue)]!, "\(value)") } - public func MessageTimer_ShortSeconds(_ value: Int32) -> String { + public func CHAT_MESSAGE_PHOTOS_SEPARATED(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[98 * 6 + Int(form.rawValue)]!, "\(value)") } diff --git a/TelegramUI/PresentationTheme.swift b/TelegramUI/PresentationTheme.swift index 2bbe699a22..1c3644c64f 100644 --- a/TelegramUI/PresentationTheme.swift +++ b/TelegramUI/PresentationTheme.swift @@ -210,11 +210,15 @@ public final class PresentationThemeSwitch { public let frameColor: UIColor public let handleColor: UIColor public let contentColor: UIColor + public let positiveColor: UIColor + public let negativeColor: UIColor - public init(frameColor: UIColor, handleColor: UIColor, contentColor: UIColor) { + public init(frameColor: UIColor, handleColor: UIColor, contentColor: UIColor, positiveColor: UIColor, negativeColor: UIColor) { self.frameColor = frameColor self.handleColor = handleColor self.contentColor = contentColor + self.positiveColor = positiveColor + self.negativeColor = negativeColor } } diff --git a/TelegramUI/Resources/PresentationStrings.mapping b/TelegramUI/Resources/PresentationStrings.mapping index 035409e63f..36842330ea 100644 Binary files a/TelegramUI/Resources/PresentationStrings.mapping and b/TelegramUI/Resources/PresentationStrings.mapping differ diff --git a/TelegramUI/StoredMessageFromSearchPeer.swift b/TelegramUI/StoredMessageFromSearchPeer.swift index f66049a2f2..a243458229 100644 --- a/TelegramUI/StoredMessageFromSearchPeer.swift +++ b/TelegramUI/StoredMessageFromSearchPeer.swift @@ -3,13 +3,17 @@ import Postbox import TelegramCore import SwiftSignalKit -func storedMessageFromSearchPeer(account: Account, peer: Peer) -> Signal { - return account.postbox.transaction { transaction -> Void in +func storedMessageFromSearchPeer(account: Account, peer: Peer) -> Signal { + return account.postbox.transaction { transaction -> PeerId in if transaction.getPeer(peer.id) == nil { updatePeers(transaction: transaction, peers: [peer], update: { previousPeer, updatedPeer in return updatedPeer }) } + if let group = transaction.getPeer(peer.id) as? TelegramGroup, let migrationReference = group.migrationReference { + return migrationReference.peerId + } + return peer.id } } diff --git a/TelegramUI/UserInfoController.swift b/TelegramUI/UserInfoController.swift index 066050d259..8e7ecd2861 100644 --- a/TelegramUI/UserInfoController.swift +++ b/TelegramUI/UserInfoController.swift @@ -665,6 +665,8 @@ private func userInfoEntries(account: Account, presentationData: PresentationDat } else { notificationsLabel = presentationData.strings.UserInfo_NotificationsDisabled } + } else if case .default = notificationSettings.messageSound { + notificationsLabel = presentationData.strings.UserInfo_NotificationsEnabled } else { notificationsLabel = localizedPeerNotificationSoundString(strings: presentationData.strings, sound: notificationSettings.messageSound, default: globalNotificationSettings.effective.channels.sound) }