Use contact auto-download settings in groups

Removed "stop bot" buttons for support accounts
This commit is contained in:
Ilya Laktyushin 2019-02-15 21:25:41 +04:00
parent a1da20afe0
commit 936adda0a9
17 changed files with 476 additions and 443 deletions

View File

@ -471,13 +471,19 @@ func isAutodownloadEnabledForAnyPeerType(category: AutomaticMediaDownloadCategor
return category.contacts || category.otherPrivate || category.groups || category.channels
}
public func shouldDownloadMediaAutomatically(settings: AutomaticMediaDownloadSettings, peerType: AutomaticMediaDownloadPeerType, networkType: AutomaticDownloadNetworkType, media: Media) -> Bool {
public func shouldDownloadMediaAutomatically(settings: AutomaticMediaDownloadSettings, peerType: AutomaticMediaDownloadPeerType, networkType: AutomaticDownloadNetworkType, authorPeerId: PeerId?, contactsPeerIds: Set<PeerId>, media: Media) -> Bool {
if (networkType == .cellular && !settings.cellular.enabled) || (networkType == .wifi && !settings.wifi.enabled) {
return false
}
if let file = media as? TelegramMediaFile, file.isSticker {
return true
}
var peerType = peerType
if case .group = peerType, let authorPeerId = authorPeerId, contactsPeerIds.contains(authorPeerId) {
peerType = .contact
}
if let (category, size) = categoryAndSizeForMedia(media, categories: effectiveAutodownloadCategories(settings: settings, networkType: networkType)) {
guard isAutodownloadEnabledForPeerType(peerType, category: category) else {
return false

View File

@ -264,6 +264,7 @@ private final class ChatHistoryTransactionOpaqueState {
private func extractAssociatedData(chatLocation: ChatLocation, view: MessageHistoryView, automaticDownloadNetworkType: AutomaticDownloadNetworkType) -> ChatMessageItemAssociatedData {
var automaticMediaDownloadPeerType: AutomaticMediaDownloadPeerType = .channel
var contactsPeerIds: Set<PeerId> = Set()
if case let .peer(peerId) = chatLocation {
if peerId.namespace == Namespaces.Peer.CloudUser || peerId.namespace == Namespaces.Peer.SecretChat {
var isContact = false
@ -276,6 +277,12 @@ private func extractAssociatedData(chatLocation: ChatLocation, view: MessageHist
automaticMediaDownloadPeerType = isContact ? .contact : .otherPrivate
} else if peerId.namespace == Namespaces.Peer.CloudGroup {
automaticMediaDownloadPeerType = .group
for case let .MessageEntry(message, _, _, _, attributes) in view.entries {
if attributes.authorIsContact, let peerId = message.author?.id {
contactsPeerIds.insert(peerId)
}
}
} else if peerId.namespace == Namespaces.Peer.CloudChannel {
for entry in view.additionalData {
if case let .peer(_, value) = entry {
@ -285,9 +292,16 @@ private func extractAssociatedData(chatLocation: ChatLocation, view: MessageHist
break
}
}
if automaticMediaDownloadPeerType == .group {
for case let .MessageEntry(message, _, _, _, attributes) in view.entries {
if attributes.authorIsContact, let peerId = message.author?.id {
contactsPeerIds.insert(peerId)
}
}
}
}
}
let associatedData = ChatMessageItemAssociatedData(automaticDownloadPeerType: automaticMediaDownloadPeerType, automaticDownloadNetworkType: automaticDownloadNetworkType, isRecentActions: false)
let associatedData = ChatMessageItemAssociatedData(automaticDownloadPeerType: automaticMediaDownloadPeerType, automaticDownloadNetworkType: automaticDownloadNetworkType, isRecentActions: false, contactsPeerIds: contactsPeerIds)
return associatedData
}

View File

@ -387,7 +387,7 @@ public class ChatListController: TelegramController, KeyShortcutResponder, UIVie
canClear = false
}
} else if let user = chatPeer as? TelegramUser, user.botInfo != nil {
canStop = true
canStop = !user.flags.contains(.isSupport)
deleteTitle = strongSelf.presentationData.strings.ChatList_DeleteChat
} else if let _ = chatPeer as? TelegramSecretChat {
deleteTitle = strongSelf.presentationData.strings.ChatList_DeleteChat

View File

@ -144,12 +144,10 @@ private enum ChatListRecentEntry: Comparable, Identifiable {
let status: ContactsPeerItemStatus
if let user = primaryPeer as? TelegramUser {
if let _ = user.botInfo {
if let phoneNumber = user.phone, phoneNumber.hasPrefix("424") {
status = .custom(strings.Bot_GenericSupportStatus)
} else {
status = .custom(strings.Bot_GenericBotStatus)
}
if user.flags.contains(.isSupport) {
status = .custom(strings.Bot_GenericSupportStatus)
} else if let _ = user.botInfo {
status = .custom(strings.Bot_GenericBotStatus)
} else if user.id != context.account.peerId {
let presence = peer.presence ?? TelegramUserPresence(status: .none, lastActivity: 0)
status = .presence(presence, timeFormat)

View File

@ -380,7 +380,7 @@ final class ChatMessageAttachedContentNode: ASDisplayNode {
if let (media, flags) = mediaAndFlags {
if let file = media as? TelegramMediaFile {
if file.isInstantVideo {
let automaticDownload = shouldDownloadMediaAutomatically(settings: automaticDownloadSettings, peerType: associatedData.automaticDownloadPeerType, networkType: associatedData.automaticDownloadNetworkType, media: file)
let automaticDownload = shouldDownloadMediaAutomatically(settings: automaticDownloadSettings, peerType: associatedData.automaticDownloadPeerType, networkType: associatedData.automaticDownloadNetworkType, authorPeerId: message.author?.id, contactsPeerIds: associatedData.contactsPeerIds, media: file)
let (videoLayout, apply) = contentInstantVideoLayout(ChatMessageBubbleContentItem(context: context, controllerInteraction: controllerInteraction, message: message, read: messageRead, presentationData: presentationData, associatedData: associatedData), constrainedSize.width - horizontalInsets.left - horizontalInsets.right, CGSize(width: 180.0, height: 180.0), .bubble, automaticDownload)
initialWidth = videoLayout.contentSize.width + videoLayout.overflowLeft + videoLayout.overflowRight
contentInstantVideoSizeAndApply = (videoLayout, apply)
@ -388,7 +388,7 @@ final class ChatMessageAttachedContentNode: ASDisplayNode {
var automaticDownload: InteractiveMediaNodeAutodownloadMode = .none
var automaticPlayback = false
if shouldDownloadMediaAutomatically(settings: automaticDownloadSettings, peerType: associatedData.automaticDownloadPeerType, networkType: associatedData.automaticDownloadNetworkType, media: file) {
if shouldDownloadMediaAutomatically(settings: automaticDownloadSettings, peerType: associatedData.automaticDownloadPeerType, networkType: associatedData.automaticDownloadNetworkType, authorPeerId: message.author?.id, contactsPeerIds: associatedData.contactsPeerIds, media: file) {
automaticDownload = .full
} else if shouldPredownloadMedia(settings: automaticDownloadSettings, peerType: associatedData.automaticDownloadPeerType, networkType: associatedData.automaticDownloadNetworkType, media: file) {
automaticDownload = .prefetch
@ -405,12 +405,12 @@ final class ChatMessageAttachedContentNode: ASDisplayNode {
initialWidth = initialImageWidth + horizontalInsets.left + horizontalInsets.right
refineContentImageLayout = refineLayout
} else if file.isSticker, let _ = file.dimensions {
let automaticDownload = shouldDownloadMediaAutomatically(settings: automaticDownloadSettings, peerType: associatedData.automaticDownloadPeerType, networkType: associatedData.automaticDownloadNetworkType, media: file)
let automaticDownload = shouldDownloadMediaAutomatically(settings: automaticDownloadSettings, peerType: associatedData.automaticDownloadPeerType, networkType: associatedData.automaticDownloadNetworkType, authorPeerId: message.author?.id, contactsPeerIds: associatedData.contactsPeerIds, media: file)
let (_, initialImageWidth, refineLayout) = contentImageLayout(context, presentationData.theme.theme, presentationData.strings, message, file, automaticDownload ? .full : .none, associatedData.automaticDownloadPeerType, automaticDownloadSettings.autoplayGifs, .constrained(CGSize(width: constrainedSize.width - horizontalInsets.left - horizontalInsets.right, height: constrainedSize.height)), layoutConstants, contentMode)
initialWidth = initialImageWidth + horizontalInsets.left + horizontalInsets.right
refineContentImageLayout = refineLayout
} else {
let automaticDownload = shouldDownloadMediaAutomatically(settings: automaticDownloadSettings, peerType: associatedData.automaticDownloadPeerType, networkType: associatedData.automaticDownloadNetworkType, media: file)
let automaticDownload = shouldDownloadMediaAutomatically(settings: automaticDownloadSettings, peerType: associatedData.automaticDownloadPeerType, networkType: associatedData.automaticDownloadNetworkType, authorPeerId: message.author?.id, contactsPeerIds: associatedData.contactsPeerIds, media: file)
let statusType: ChatMessageDateAndStatusType
if message.effectivelyIncoming(context.account.peerId) {
@ -430,7 +430,7 @@ final class ChatMessageAttachedContentNode: ASDisplayNode {
}
} else if let image = media as? TelegramMediaImage {
if !flags.contains(.preferMediaInline) {
let automaticDownload = shouldDownloadMediaAutomatically(settings: automaticDownloadSettings, peerType: associatedData.automaticDownloadPeerType, networkType: associatedData.automaticDownloadNetworkType, media: image)
let automaticDownload = shouldDownloadMediaAutomatically(settings: automaticDownloadSettings, peerType: associatedData.automaticDownloadPeerType, networkType: associatedData.automaticDownloadNetworkType, authorPeerId: message.author?.id, contactsPeerIds: associatedData.contactsPeerIds, media: image)
let (_, initialImageWidth, refineLayout) = contentImageLayout(context, presentationData.theme.theme, presentationData.strings, message, image, automaticDownload ? .full : .none, associatedData.automaticDownloadPeerType, automaticDownloadSettings.autoplayGifs, .constrained(CGSize(width: constrainedSize.width - horizontalInsets.left - horizontalInsets.right, height: constrainedSize.height)), layoutConstants, contentMode)
initialWidth = initialImageWidth + horizontalInsets.left + horizontalInsets.right
refineContentImageLayout = refineLayout
@ -442,7 +442,7 @@ final class ChatMessageAttachedContentNode: ASDisplayNode {
}
}
} else if let image = media as? TelegramMediaWebFile {
let automaticDownload = shouldDownloadMediaAutomatically(settings: automaticDownloadSettings, peerType: associatedData.automaticDownloadPeerType, networkType: associatedData.automaticDownloadNetworkType, media: image)
let automaticDownload = shouldDownloadMediaAutomatically(settings: automaticDownloadSettings, peerType: associatedData.automaticDownloadPeerType, networkType: associatedData.automaticDownloadNetworkType, authorPeerId: message.author?.id, contactsPeerIds: associatedData.contactsPeerIds, media: image)
let (_, initialImageWidth, refineLayout) = contentImageLayout(context, presentationData.theme.theme, presentationData.strings, message, image, automaticDownload ? .full : .none, associatedData.automaticDownloadPeerType, automaticDownloadSettings.autoplayGifs, .constrained(CGSize(width: constrainedSize.width - horizontalInsets.left - horizontalInsets.right, height: constrainedSize.height)), layoutConstants, contentMode)
initialWidth = initialImageWidth + horizontalInsets.left + horizontalInsets.right
refineContentImageLayout = refineLayout

View File

@ -66,8 +66,7 @@ class ChatMessageFileBubbleContentNode: ChatMessageBubbleContentNode {
statusType = nil
}
var automaticDownload = false
automaticDownload = shouldDownloadMediaAutomatically(settings: item.controllerInteraction.automaticMediaDownloadSettings, peerType: item.associatedData.automaticDownloadPeerType, networkType: item.associatedData.automaticDownloadNetworkType, media: selectedFile!)
let automaticDownload = shouldDownloadMediaAutomatically(settings: item.controllerInteraction.automaticMediaDownloadSettings, peerType: item.associatedData.automaticDownloadPeerType, networkType: item.associatedData.automaticDownloadNetworkType, authorPeerId: item.message.author?.id, contactsPeerIds: item.associatedData.contactsPeerIds, media: selectedFile!)
let (initialWidth, refineLayout) = interactiveFileLayout(item.context, item.presentationData, item.message, selectedFile!, automaticDownload, item.message.effectivelyIncoming(item.context.account.peerId), item.associatedData.isRecentActions, statusType, CGSize(width: constrainedSize.width - layoutConstants.file.bubbleInsets.left - layoutConstants.file.bubbleInsets.right, height: constrainedSize.height))

View File

@ -178,7 +178,7 @@ class ChatMessageInstantVideoItemNode: ChatMessageItemView {
var automaticDownload = true
for media in item.message.media {
if let file = media as? TelegramMediaFile {
automaticDownload = shouldDownloadMediaAutomatically(settings: item.controllerInteraction.automaticMediaDownloadSettings, peerType: item.associatedData.automaticDownloadPeerType, networkType: item.associatedData.automaticDownloadNetworkType, media: file)
automaticDownload = shouldDownloadMediaAutomatically(settings: item.controllerInteraction.automaticMediaDownloadSettings, peerType: item.associatedData.automaticDownloadPeerType, networkType: item.associatedData.automaticDownloadNetworkType, authorPeerId: item.message.author?.id, contactsPeerIds: item.associatedData.contactsPeerIds, media: file)
}
}

View File

@ -191,11 +191,13 @@ public final class ChatMessageItemAssociatedData: Equatable {
let automaticDownloadPeerType: AutomaticMediaDownloadPeerType
let automaticDownloadNetworkType: AutomaticDownloadNetworkType
let isRecentActions: Bool
let contactsPeerIds: Set<PeerId>
init(automaticDownloadPeerType: AutomaticMediaDownloadPeerType, automaticDownloadNetworkType: AutomaticDownloadNetworkType, isRecentActions: Bool) {
init(automaticDownloadPeerType: AutomaticMediaDownloadPeerType, automaticDownloadNetworkType: AutomaticDownloadNetworkType, isRecentActions: Bool, contactsPeerIds: Set<PeerId> = Set()) {
self.automaticDownloadPeerType = automaticDownloadPeerType
self.automaticDownloadNetworkType = automaticDownloadNetworkType
self.isRecentActions = isRecentActions
self.contactsPeerIds = contactsPeerIds
}
public static func == (lhs: ChatMessageItemAssociatedData, rhs: ChatMessageItemAssociatedData) -> Bool {
@ -208,6 +210,9 @@ public final class ChatMessageItemAssociatedData: Equatable {
if lhs.isRecentActions != rhs.isRecentActions {
return false
}
if lhs.contactsPeerIds != rhs.contactsPeerIds {
return false
}
return true
}
}

View File

@ -66,12 +66,12 @@ class ChatMessageMediaBubbleContentNode: ChatMessageBubbleContentNode {
for media in item.message.media {
if let telegramImage = media as? TelegramMediaImage {
selectedMedia = telegramImage
if shouldDownloadMediaAutomatically(settings: item.controllerInteraction.automaticMediaDownloadSettings, peerType: item.associatedData.automaticDownloadPeerType, networkType: item.associatedData.automaticDownloadNetworkType, media: telegramImage) {
if shouldDownloadMediaAutomatically(settings: item.controllerInteraction.automaticMediaDownloadSettings, peerType: item.associatedData.automaticDownloadPeerType, networkType: item.associatedData.automaticDownloadNetworkType, authorPeerId: item.message.author?.id, contactsPeerIds: item.associatedData.contactsPeerIds, media: telegramImage) {
automaticDownload = .full
}
} else if let telegramFile = media as? TelegramMediaFile {
selectedMedia = telegramFile
if shouldDownloadMediaAutomatically(settings: item.controllerInteraction.automaticMediaDownloadSettings, peerType: item.associatedData.automaticDownloadPeerType, networkType: item.associatedData.automaticDownloadNetworkType, media: telegramFile) {
if shouldDownloadMediaAutomatically(settings: item.controllerInteraction.automaticMediaDownloadSettings, peerType: item.associatedData.automaticDownloadPeerType, networkType: item.associatedData.automaticDownloadNetworkType, authorPeerId: item.message.author?.id, contactsPeerIds: item.associatedData.contactsPeerIds, media: telegramFile) {
automaticDownload = .full
} else if shouldPredownloadMedia(settings: item.controllerInteraction.automaticMediaDownloadSettings, peerType: item.associatedData.automaticDownloadPeerType, networkType: item.associatedData.automaticDownloadNetworkType, media: telegramFile) {
automaticDownload = .prefetch

View File

@ -221,7 +221,7 @@ final class ChatMessageWebpageBubbleContentNode: ChatMessageBubbleContentNode {
var automaticPlayback = false
if let file = webpage.file, !file.isAnimated, item.controllerInteraction.automaticMediaDownloadSettings.autoplayVideos {
if shouldDownloadMediaAutomatically(settings: item.controllerInteraction.automaticMediaDownloadSettings, peerType: item.associatedData.automaticDownloadPeerType, networkType: item.associatedData.automaticDownloadNetworkType, media: file) {
if shouldDownloadMediaAutomatically(settings: item.controllerInteraction.automaticMediaDownloadSettings, peerType: item.associatedData.automaticDownloadPeerType, networkType: item.associatedData.automaticDownloadNetworkType, authorPeerId: item.message.author?.id, contactsPeerIds: item.associatedData.contactsPeerIds, media: file) {
automaticPlayback = true
}
}

View File

@ -336,13 +336,17 @@ final class ChatTitleView: UIView, NavigationBarTitleView {
self.infoNode.attributedText = string
shouldUpdateLayout = true
}
} else if let _ = user.botInfo {
let statusText: String
if let phoneNumber = user.phone, phoneNumber.hasPrefix("424") {
statusText = self.strings.Bot_GenericSupportStatus
} else {
statusText = self.strings.Bot_GenericBotStatus
} else if user.flags.contains(.isSupport) {
let statusText = self.strings.Bot_GenericSupportStatus
let string = NSAttributedString(string: statusText, font: Font.regular(13.0), textColor: self.theme.rootController.navigationBar.secondaryTextColor)
if self.infoNode.attributedText == nil || !self.infoNode.attributedText!.isEqual(to: string) {
self.infoNode.attributedText = string
shouldUpdateLayout = true
}
} else if let _ = user.botInfo {
let statusText = self.strings.Bot_GenericBotStatus
let string = NSAttributedString(string: statusText, font: Font.regular(13.0), textColor: self.theme.rootController.navigationBar.secondaryTextColor)
if self.infoNode.attributedText == nil || !self.infoNode.attributedText!.isEqual(to: string) {
self.infoNode.attributedText = string

View File

@ -420,12 +420,11 @@ class ItemListAvatarAndNameInfoItemNode: ListViewItemNode, ItemListItemNode, Ite
if let label = item.label {
statusText = label
statusColor = item.theme.list.itemSecondaryTextColor
} else if peer.flags.contains(.isSupport) {
statusText = item.strings.Bot_GenericSupportStatus
statusColor = item.theme.list.itemSecondaryTextColor
} else if let _ = peer.botInfo {
if let phoneNumber = peer.phone, phoneNumber.hasPrefix("424") {
statusText = item.strings.Bot_GenericSupportStatus
} else {
statusText = item.strings.Bot_GenericBotStatus
}
statusText = item.strings.Bot_GenericBotStatus
statusColor = item.theme.list.itemSecondaryTextColor
} else if case .generic = item.mode, !(peer.id.namespace == Namespaces.Peer.CloudUser && (peer.id.id == 777000 || peer.id.id == 333000)) {
let presence = (item.presence as? TelegramUserPresence) ?? TelegramUserPresence(status: .none, lastActivity: 0)

View File

@ -1502,14 +1502,19 @@ func internalMediaGridMessageVideo(postbox: Postbox, videoReference: FileMediaRe
let context = DrawingContext(size: arguments.drawingSize, clear: true)
let drawingRect = arguments.drawingRect
var fittedSize = arguments.imageSize.aspectFilled(arguments.boundingSize).fitted(arguments.imageSize)
if fittedSize.width < drawingRect.size.width && fittedSize.width >= drawingRect.size.width - 2.0 {
fittedSize.width = drawingRect.size.width
var drawingSize: CGSize
if case .aspectFill = arguments.resizeMode {
drawingSize = arguments.imageSize.aspectFilled(arguments.boundingSize)
} else {
drawingSize = arguments.imageSize.aspectFilled(arguments.boundingSize).fitted(arguments.imageSize)
}
if fittedSize.height < drawingRect.size.height && fittedSize.height >= drawingRect.size.height - 2.0 {
fittedSize.height = drawingRect.size.height
if drawingSize.width < drawingRect.size.width && drawingSize.width >= drawingRect.size.width - 2.0 {
drawingSize.width = drawingRect.size.width
}
let fittedRect = CGRect(origin: CGPoint(x: drawingRect.origin.x + (drawingRect.size.width - fittedSize.width) / 2.0, y: drawingRect.origin.y + (drawingRect.size.height - fittedSize.height) / 2.0), size: fittedSize)
if drawingSize.height < drawingRect.size.height && drawingSize.height >= drawingRect.size.height - 2.0 {
drawingSize.height = drawingRect.size.height
}
let fittedRect = CGRect(origin: CGPoint(x: drawingRect.origin.x + (drawingRect.size.width - drawingSize.width) / 2.0, y: drawingRect.origin.y + (drawingRect.size.height - drawingSize.height) / 2.0), size: drawingSize)
var fullSizeImage: CGImage?
var imageOrientation: UIImageOrientation = .up
@ -1544,7 +1549,7 @@ func internalMediaGridMessageVideo(postbox: Postbox, videoReference: FileMediaRe
blurredThumbnailImage = UIImage(cgImage: thumbnailImage)
} else {
let thumbnailSize = CGSize(width: thumbnailImage.width, height: thumbnailImage.height)
let initialThumbnailContextFittingSize = fittedSize.fitted(CGSize(width: 100.0, height: 100.0))
let initialThumbnailContextFittingSize = drawingSize.fitted(CGSize(width: 100.0, height: 100.0))
let thumbnailContextSize = thumbnailSize.aspectFitted(initialThumbnailContextFittingSize)
let thumbnailContext = DrawingContext(size: thumbnailContextSize, scale: 1.0)
@ -1587,7 +1592,7 @@ func internalMediaGridMessageVideo(postbox: Postbox, videoReference: FileMediaRe
var sideBlurredImage: UIImage?
let thumbnailSize = CGSize(width: fullSizeImage.width, height: fullSizeImage.height)
if true {
let initialThumbnailContextFittingSize = fittedSize.fitted(CGSize(width: 100.0, height: 100.0))
let initialThumbnailContextFittingSize = drawingSize.fitted(CGSize(width: 100.0, height: 100.0))
let thumbnailContextSize = thumbnailSize.aspectFitted(initialThumbnailContextFittingSize)
let thumbnailContext = DrawingContext(size: thumbnailContextSize, scale: 1.0)
@ -1643,6 +1648,8 @@ func internalMediaGridMessageVideo(postbox: Postbox, videoReference: FileMediaRe
case let .fill(color):
c.setFillColor((arguments.emptyColor ?? color).cgColor)
c.fill(arguments.drawingRect)
case .aspectFill:
break
}
}

View File

@ -3509,427 +3509,427 @@ public final class PresentationStrings {
public var Channel_Setup_TypePublicHelp: String { return self._s[3133]! }
public var Passport_Identity_EditInternalPassport: String { return self._s[3134]! }
public var PhotoEditor_Skip: String { return self._s[3135]! }
public func LastSeen_MinutesAgo(_ value: Int32) -> String {
public func ForwardedVideoMessages(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[0 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func Conversation_StatusOnline(_ value: Int32) -> String {
public func MuteFor_Days(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[1 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func PUSH_MESSAGE_FWDS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, selector)
return String(format: self._ps[2 * 6 + Int(form.rawValue)]!, _1, _2)
}
public func PUSH_CHAT_MESSAGE_PHOTOS(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, selector)
return String(format: self._ps[3 * 6 + Int(form.rawValue)]!, _2, _1, _3)
}
public func PUSH_CHANNEL_MESSAGE_ROUNDS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, selector)
return String(format: self._ps[4 * 6 + Int(form.rawValue)]!, _1, _2)
}
public func AttachmentMenu_SendGif(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[5 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func ForwardedFiles(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[6 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func Notifications_ExceptionMuteExpires_Days(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[7 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func MessageTimer_Minutes(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[8 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func LiveLocation_MenuChatsCount(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[9 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func MessageTimer_Years(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[10 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func AttachmentMenu_SendItem(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[11 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func Map_ETAHours(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[12 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func PUSH_CHAT_MESSAGES(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, selector)
return String(format: self._ps[13 * 6 + Int(form.rawValue)]!, _2, _1, _3)
}
public func MessageTimer_Hours(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[14 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func ForwardedVideoMessages(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[15 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func StickerPack_StickerCount(_ 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 {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[17 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func Conversation_StatusSubscribers(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[18 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func SharedMedia_File(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[19 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func Wallpaper_DeleteConfirmation(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[20 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func SharedMedia_Video(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[21 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func Call_Minutes(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[22 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func MessageTimer_ShortMinutes(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[23 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func PUSH_CHAT_MESSAGE_FWDS(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, selector)
return String(format: self._ps[24 * 6 + Int(form.rawValue)]!, _2, _1, _3)
}
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 MuteExpires_Minutes(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[26 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func PUSH_MESSAGE_VIDEOS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, selector)
return String(format: self._ps[27 * 6 + Int(form.rawValue)]!, _1, _2)
}
public func Map_ETAMinutes(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[28 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func GroupInfo_ParticipantCount(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[29 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func PrivacyLastSeenSettings_AddUsers(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[30 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func MessageTimer_Weeks(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[31 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func Notification_GameScoreSimple(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[32 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func ServiceMessage_GameScoreExtended(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[33 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func ForwardedPolls(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[34 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func Media_ShareItem(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[35 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func ServiceMessage_GameScoreSelfSimple(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[36 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func ServiceMessage_GameScoreSimple(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[37 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func Media_ShareVideo(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[38 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func PUSH_CHANNEL_MESSAGE_FWDS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, selector)
return String(format: self._ps[39 * 6 + Int(form.rawValue)]!, _1, _2)
}
public func SharedMedia_DeleteItemsConfirmation(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[40 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func ForwardedStickers(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[41 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func Watch_LastSeen_HoursAgo(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[42 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func MessageTimer_Seconds(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[43 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func Watch_UserInfo_Mute(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[44 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func Watch_LastSeen_MinutesAgo(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[45 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func ForwardedContacts(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[46 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func AttachmentMenu_SendVideo(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[47 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func StickerPack_AddStickerCount(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[48 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func PUSH_MESSAGE_ROUNDS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, selector)
return String(format: self._ps[49 * 6 + Int(form.rawValue)]!, _1, _2)
}
public func AttachmentMenu_SendPhoto(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[50 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func MessageTimer_Days(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[51 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func Invitation_Members(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[52 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func ForwardedPhotos(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[53 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func SharedMedia_Generic(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[54 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func ForwardedGifs(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[55 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func MessageTimer_ShortDays(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[56 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func PUSH_CHANNEL_MESSAGE_PHOTOS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, selector)
return String(format: self._ps[57 * 6 + Int(form.rawValue)]!, _1, _2)
}
public func ForwardedVideos(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[58 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func MessageTimer_ShortHours(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[59 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func Passport_Scans(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[60 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func PasscodeSettings_FailedAttempts(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[61 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func PUSH_MESSAGES(_ selector: Int32, _ _1: String, _ _2: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, selector)
return String(format: self._ps[62 * 6 + Int(form.rawValue)]!, _1, _2)
}
public func SharedMedia_Link(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[63 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func ForwardedLocations(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[64 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func CreatePoll_AddMoreOptions(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[65 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func StickerPack_AddMaskCount(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[66 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func Forward_ConfirmMultipleFiles(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[67 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func MessageTimer_ShortSeconds(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[68 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func Notifications_ExceptionMuteExpires_Minutes(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[69 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func Call_ShortMinutes(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[70 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func PUSH_MESSAGE_PHOTOS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, selector)
return String(format: self._ps[71 * 6 + Int(form.rawValue)]!, _1, _2)
}
public func SharedMedia_Photo(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[72 * 6 + Int(form.rawValue)]!, "\(value)")
return String(format: self._ps[2 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func LiveLocationUpdated_MinutesAgo(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[73 * 6 + Int(form.rawValue)]!, "\(value)")
return String(format: self._ps[3 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func StickerPack_RemoveStickerCount(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[74 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func Notification_GameScoreExtended(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[75 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func MuteExpires_Days(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[76 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func ForwardedMessages(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[77 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func ChatList_DeleteConfirmation(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[78 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func QuickSend_Photos(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[79 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func Call_ShortSeconds(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[80 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func Notifications_Exceptions(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[81 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func UserCount(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[82 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func Contacts_ImportersCount(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[83 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func Media_SharePhoto(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[84 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func LastSeen_HoursAgo(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[85 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func ServiceMessage_GameScoreSelfExtended(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[86 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func MessageTimer_ShortWeeks(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[87 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func PUSH_CHANNEL_MESSAGES(_ selector: Int32, _ _1: String, _ _2: Int32) -> String {
public func PUSH_CHAT_MESSAGES(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, selector)
return String(format: self._ps[88 * 6 + Int(form.rawValue)]!, _1, _2)
return String(format: self._ps[4 * 6 + Int(form.rawValue)]!, _2, _1, _3)
}
public func InviteText_ContactsCountText(_ value: Int32) -> String {
public func MessageTimer_Minutes(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[89 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func MessageTimer_Months(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[90 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func PUSH_CHAT_MESSAGE_ROUNDS(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, selector)
return String(format: self._ps[91 * 6 + Int(form.rawValue)]!, _2, _1, _3)
}
public func Conversation_StatusMembers(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[92 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func ForwardedAuthorsOthers(_ selector: Int32, _ _0: String, _ _1: String) -> String {
let form = presentationStringsPluralizationForm(self.lc, selector)
return String(format: self._ps[93 * 6 + Int(form.rawValue)]!, _0, _1)
}
public func PUSH_CHAT_MESSAGE_VIDEOS(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, selector)
return String(format: self._ps[94 * 6 + Int(form.rawValue)]!, _2, _1, _3)
}
public func Conversation_LiveLocationMembersCount(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[95 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func MuteFor_Days(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[96 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func MuteFor_Hours(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[97 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func Notifications_ExceptionMuteExpires_Hours(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[98 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func MuteExpires_Hours(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[99 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func ForwardedAudios(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[100 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func Notification_GameScoreSelfExtended(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[101 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func Notification_GameScoreSelfSimple(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[102 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func Call_Seconds(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[103 * 6 + Int(form.rawValue)]!, "\(value)")
return String(format: self._ps[5 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func PUSH_CHANNEL_MESSAGE_VIDEOS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, selector)
return String(format: self._ps[104 * 6 + Int(form.rawValue)]!, _1, _2)
return String(format: self._ps[6 * 6 + Int(form.rawValue)]!, _1, _2)
}
public func PUSH_MESSAGE_VIDEOS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, selector)
return String(format: self._ps[7 * 6 + Int(form.rawValue)]!, _1, _2)
}
public func AttachmentMenu_SendPhoto(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[8 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func ForwardedMessages(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[9 * 6 + Int(form.rawValue)]!, "\(value)")
}
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 AttachmentMenu_SendGif(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[11 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func SharedMedia_Photo(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[12 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func MessageTimer_ShortWeeks(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[13 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func Conversation_LiveLocationMembersCount(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[14 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func ServiceMessage_GameScoreExtended(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[15 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func SharedMedia_DeleteItemsConfirmation(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[16 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func MessageTimer_Months(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[17 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func ServiceMessage_GameScoreSelfSimple(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[18 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func StickerPack_RemoveStickerCount(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[19 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func ServiceMessage_GameScoreSelfExtended(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[20 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func Notification_GameScoreSelfSimple(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[21 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func MessageTimer_Seconds(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[22 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func StickerPack_StickerCount(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[23 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func ChatList_DeleteConfirmation(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[24 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func PUSH_CHAT_MESSAGE_ROUNDS(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, selector)
return String(format: self._ps[25 * 6 + Int(form.rawValue)]!, _2, _1, _3)
}
public func PUSH_CHANNEL_MESSAGES(_ selector: Int32, _ _1: String, _ _2: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, selector)
return String(format: self._ps[26 * 6 + Int(form.rawValue)]!, _1, _2)
}
public func MessageTimer_Hours(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[27 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func MessageTimer_ShortMinutes(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[28 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func LiveLocation_MenuChatsCount(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[29 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func MessageTimer_Days(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[30 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func Notification_GameScoreExtended(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[31 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func Call_ShortSeconds(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[32 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func MessageTimer_Weeks(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[33 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func MuteFor_Hours(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[34 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func Map_ETAHours(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[35 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func Call_Minutes(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[36 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func PUSH_MESSAGE_PHOTOS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, selector)
return String(format: self._ps[37 * 6 + Int(form.rawValue)]!, _1, _2)
}
public func Contacts_ImportersCount(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[38 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func SharedMedia_Generic(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[39 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func DialogList_LiveLocationChatsCount(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[40 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func PUSH_CHAT_MESSAGE_VIDEOS(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, selector)
return String(format: self._ps[41 * 6 + Int(form.rawValue)]!, _2, _1, _3)
}
public func Notifications_ExceptionMuteExpires_Days(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[42 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func MuteExpires_Minutes(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[43 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func PUSH_CHANNEL_MESSAGE_FWDS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, selector)
return String(format: self._ps[44 * 6 + Int(form.rawValue)]!, _1, _2)
}
public func Conversation_StatusSubscribers(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[45 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func ForwardedLocations(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[46 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func Map_ETAMinutes(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[47 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func ForwardedAudios(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[48 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func StickerPack_AddStickerCount(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[49 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func PrivacyLastSeenSettings_AddUsers(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[50 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func MessagePoll_VotedCount(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[51 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func Notifications_ExceptionMuteExpires_Hours(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[52 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func Notification_GameScoreSimple(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[53 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func PUSH_CHAT_MESSAGE_PHOTOS(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, selector)
return String(format: self._ps[54 * 6 + Int(form.rawValue)]!, _2, _1, _3)
}
public func ServiceMessage_GameScoreSimple(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[55 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func Forward_ConfirmMultipleFiles(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[56 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func MessageTimer_ShortHours(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[57 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func ForwardedAuthorsOthers(_ selector: Int32, _ _0: String, _ _1: String) -> String {
let form = presentationStringsPluralizationForm(self.lc, selector)
return String(format: self._ps[58 * 6 + Int(form.rawValue)]!, _0, _1)
}
public func LastSeen_MinutesAgo(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[59 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func QuickSend_Photos(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[60 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func StickerPack_AddMaskCount(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[61 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func ForwardedGifs(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[62 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func Wallpaper_DeleteConfirmation(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[63 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func LastSeen_HoursAgo(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[64 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func Conversation_StatusOnline(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[65 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func AttachmentMenu_SendVideo(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[66 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func Call_Seconds(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[67 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func InviteText_ContactsCountText(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[68 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func MessageTimer_ShortSeconds(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[69 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func Media_ShareItem(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[70 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func MuteExpires_Hours(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[71 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func MessageTimer_ShortDays(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[72 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func UserCount(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[73 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func ForwardedContacts(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[74 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func SharedMedia_Video(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[75 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func PUSH_CHANNEL_MESSAGE_ROUNDS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, selector)
return String(format: self._ps[76 * 6 + Int(form.rawValue)]!, _1, _2)
}
public func Notifications_ExceptionMuteExpires_Minutes(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[77 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func PUSH_MESSAGE_ROUNDS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, selector)
return String(format: self._ps[78 * 6 + Int(form.rawValue)]!, _1, _2)
}
public func Call_ShortMinutes(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[79 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func Passport_Scans(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[80 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func AttachmentMenu_SendItem(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[81 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func ForwardedFiles(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[82 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func ForwardedPolls(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[83 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func SharedMedia_Link(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[84 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func ForwardedStickers(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[85 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func Conversation_StatusMembers(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[86 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func PUSH_CHANNEL_MESSAGE_PHOTOS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, selector)
return String(format: self._ps[87 * 6 + Int(form.rawValue)]!, _1, _2)
}
public func Notification_GameScoreSelfExtended(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[88 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func GroupInfo_ParticipantCount(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[89 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func MuteExpires_Days(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[90 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func PUSH_CHAT_MESSAGE_FWDS(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, selector)
return String(format: self._ps[91 * 6 + Int(form.rawValue)]!, _2, _1, _3)
}
public func MessageTimer_Years(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[92 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func PasscodeSettings_FailedAttempts(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[93 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func CreatePoll_AddMoreOptions(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[94 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func PUSH_MESSAGE_FWDS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, selector)
return String(format: self._ps[95 * 6 + Int(form.rawValue)]!, _1, _2)
}
public func Watch_LastSeen_MinutesAgo(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[96 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func Media_SharePhoto(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[97 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func Watch_UserInfo_Mute(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[98 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func Invitation_Members(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[99 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func ForwardedPhotos(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[100 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func PUSH_MESSAGES(_ selector: Int32, _ _1: String, _ _2: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, selector)
return String(format: self._ps[101 * 6 + Int(form.rawValue)]!, _1, _2)
}
public func Watch_LastSeen_HoursAgo(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[102 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func SharedMedia_File(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[103 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func StickerPack_RemoveMaskCount(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[104 * 6 + Int(form.rawValue)]!, "\(value)")
}
public func Media_ShareVideo(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[105 * 6 + Int(form.rawValue)]!, "\(value)")
}

View File

@ -3,6 +3,7 @@ import UIKit
public enum TransformImageResizeMode {
case fill(UIColor)
case aspectFill
case blurBackground
}

View File

@ -693,7 +693,7 @@ private func userInfoEntries(account: Account, presentationData: PresentationDat
if cachedData.isBlocked {
entries.append(UserInfoEntry.block(presentationData.theme, stringForBlockAction(strings: presentationData.strings, action: .unblock, peer: user), .unblock))
} else {
if let peer = peer as? TelegramUser, let phone = peer.phone, phone.hasPrefix("424") {
if let peer = peer as? TelegramUser, peer.flags.contains(.isSupport) {
} else {
entries.append(UserInfoEntry.block(presentationData.theme, stringForBlockAction(strings: presentationData.strings, action: .block, peer: user), .block))
}