diff --git a/TelegramUI/AutomaticMediaDownloadSettings.swift b/TelegramUI/AutomaticMediaDownloadSettings.swift index e392eb36a1..ef97c70bd1 100644 --- a/TelegramUI/AutomaticMediaDownloadSettings.swift +++ b/TelegramUI/AutomaticMediaDownloadSettings.swift @@ -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, 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 diff --git a/TelegramUI/ChatHistoryListNode.swift b/TelegramUI/ChatHistoryListNode.swift index 0008dad298..5d7b3e9894 100644 --- a/TelegramUI/ChatHistoryListNode.swift +++ b/TelegramUI/ChatHistoryListNode.swift @@ -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 = 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 } diff --git a/TelegramUI/ChatListController.swift b/TelegramUI/ChatListController.swift index 5a96218584..3608a5d224 100644 --- a/TelegramUI/ChatListController.swift +++ b/TelegramUI/ChatListController.swift @@ -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 diff --git a/TelegramUI/ChatListSearchContainerNode.swift b/TelegramUI/ChatListSearchContainerNode.swift index 539118f5b4..88ca2223aa 100644 --- a/TelegramUI/ChatListSearchContainerNode.swift +++ b/TelegramUI/ChatListSearchContainerNode.swift @@ -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) diff --git a/TelegramUI/ChatMessageAttachedContentNode.swift b/TelegramUI/ChatMessageAttachedContentNode.swift index 68288d9591..53b35bbd06 100644 --- a/TelegramUI/ChatMessageAttachedContentNode.swift +++ b/TelegramUI/ChatMessageAttachedContentNode.swift @@ -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 diff --git a/TelegramUI/ChatMessageFileBubbleContentNode.swift b/TelegramUI/ChatMessageFileBubbleContentNode.swift index 3e4debaf2d..967267043e 100644 --- a/TelegramUI/ChatMessageFileBubbleContentNode.swift +++ b/TelegramUI/ChatMessageFileBubbleContentNode.swift @@ -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)) diff --git a/TelegramUI/ChatMessageInstantVideoItemNode.swift b/TelegramUI/ChatMessageInstantVideoItemNode.swift index 957c1a447c..0746cb6c9d 100644 --- a/TelegramUI/ChatMessageInstantVideoItemNode.swift +++ b/TelegramUI/ChatMessageInstantVideoItemNode.swift @@ -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) } } diff --git a/TelegramUI/ChatMessageItem.swift b/TelegramUI/ChatMessageItem.swift index bbec1ef583..d766708ece 100644 --- a/TelegramUI/ChatMessageItem.swift +++ b/TelegramUI/ChatMessageItem.swift @@ -191,11 +191,13 @@ public final class ChatMessageItemAssociatedData: Equatable { let automaticDownloadPeerType: AutomaticMediaDownloadPeerType let automaticDownloadNetworkType: AutomaticDownloadNetworkType let isRecentActions: Bool + let contactsPeerIds: Set - init(automaticDownloadPeerType: AutomaticMediaDownloadPeerType, automaticDownloadNetworkType: AutomaticDownloadNetworkType, isRecentActions: Bool) { + init(automaticDownloadPeerType: AutomaticMediaDownloadPeerType, automaticDownloadNetworkType: AutomaticDownloadNetworkType, isRecentActions: Bool, contactsPeerIds: Set = 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 } } diff --git a/TelegramUI/ChatMessageMediaBubbleContentNode.swift b/TelegramUI/ChatMessageMediaBubbleContentNode.swift index 8ee79049b0..baa8bc9fe2 100644 --- a/TelegramUI/ChatMessageMediaBubbleContentNode.swift +++ b/TelegramUI/ChatMessageMediaBubbleContentNode.swift @@ -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 diff --git a/TelegramUI/ChatMessageWebpageBubbleContentNode.swift b/TelegramUI/ChatMessageWebpageBubbleContentNode.swift index 1a7885c8c6..998b719242 100644 --- a/TelegramUI/ChatMessageWebpageBubbleContentNode.swift +++ b/TelegramUI/ChatMessageWebpageBubbleContentNode.swift @@ -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 } } diff --git a/TelegramUI/ChatTitleView.swift b/TelegramUI/ChatTitleView.swift index 85dbf4d869..0be48b6512 100644 --- a/TelegramUI/ChatTitleView.swift +++ b/TelegramUI/ChatTitleView.swift @@ -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 diff --git a/TelegramUI/ItemListAvatarAndNameItem.swift b/TelegramUI/ItemListAvatarAndNameItem.swift index 9d8e3646bc..9823fdc639 100644 --- a/TelegramUI/ItemListAvatarAndNameItem.swift +++ b/TelegramUI/ItemListAvatarAndNameItem.swift @@ -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) diff --git a/TelegramUI/PhotoResources.swift b/TelegramUI/PhotoResources.swift index 71d51918ac..d694cd8da7 100644 --- a/TelegramUI/PhotoResources.swift +++ b/TelegramUI/PhotoResources.swift @@ -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 } } diff --git a/TelegramUI/PresentationStrings.swift b/TelegramUI/PresentationStrings.swift index 5d57fb5ef9..9280de92ea 100644 --- a/TelegramUI/PresentationStrings.swift +++ b/TelegramUI/PresentationStrings.swift @@ -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)") } diff --git a/TelegramUI/Resources/PresentationStrings.mapping b/TelegramUI/Resources/PresentationStrings.mapping index 5e21d3991c..15b71e07b8 100644 Binary files a/TelegramUI/Resources/PresentationStrings.mapping and b/TelegramUI/Resources/PresentationStrings.mapping differ diff --git a/TelegramUI/TransformImageArguments.swift b/TelegramUI/TransformImageArguments.swift index b354cbd523..a7b1f64d25 100644 --- a/TelegramUI/TransformImageArguments.swift +++ b/TelegramUI/TransformImageArguments.swift @@ -3,6 +3,7 @@ import UIKit public enum TransformImageResizeMode { case fill(UIColor) + case aspectFill case blurBackground } diff --git a/TelegramUI/UserInfoController.swift b/TelegramUI/UserInfoController.swift index 408f9cd0b4..e7cb629ec1 100644 --- a/TelegramUI/UserInfoController.swift +++ b/TelegramUI/UserInfoController.swift @@ -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)) }