From 686f3c4a754845bc07a39540b10a8e606c8b1e2d Mon Sep 17 00:00:00 2001 From: Ali <> Date: Mon, 6 Nov 2023 23:50:16 +0400 Subject: [PATCH] Unify link preview image size --- .../ChatMessageWebpageBubbleContentNode.swift | 34 ++++++++++++++++--- .../Chat/ChatMessageActionOptions.swift | 9 ++++- 2 files changed, 38 insertions(+), 5 deletions(-) diff --git a/submodules/TelegramUI/Components/Chat/ChatMessageWebpageBubbleContentNode/Sources/ChatMessageWebpageBubbleContentNode.swift b/submodules/TelegramUI/Components/Chat/ChatMessageWebpageBubbleContentNode/Sources/ChatMessageWebpageBubbleContentNode.swift index 17e3d8a0e7..6634fce5e5 100644 --- a/submodules/TelegramUI/Components/Chat/ChatMessageWebpageBubbleContentNode/Sources/ChatMessageWebpageBubbleContentNode.swift +++ b/submodules/TelegramUI/Components/Chat/ChatMessageWebpageBubbleContentNode/Sources/ChatMessageWebpageBubbleContentNode.swift @@ -22,6 +22,31 @@ import ChatControllerInteraction private let titleFont: UIFont = Font.semibold(15.0) +public func defaultWebpageImageSizeIsSmall(webpage: TelegramMediaWebpageLoadedContent) -> Bool { + let type = websiteType(of: webpage.websiteName) + + let mainMedia: Media? + switch type { + case .instagram, .twitter: + mainMedia = webpage.story ?? webpage.image ?? webpage.file + default: + mainMedia = webpage.story ?? webpage.file ?? webpage.image + } + + if let image = mainMedia as? TelegramMediaImage { + if let type = webpage.type, (["photo", "video", "embed", "gif", "document", "telegram_album"] as [String]).contains(type) { + } else if let type = webpage.type, (["article"] as [String]).contains(type) { + return true + } else if let _ = largestImageRepresentation(image.representations)?.dimensions { + if webpage.instantPage == nil { + return true + } + } + } + + return false +} + public final class ChatMessageWebpageBubbleContentNode: ChatMessageBubbleContentNode { private var webPage: TelegramMediaWebpage? @@ -309,10 +334,7 @@ public final class ChatMessageWebpageBubbleContentNode: ChatMessageBubbleContent } mediaAndFlags = (image, flags) } else if let _ = largestImageRepresentation(image.representations)?.dimensions { - var flags = ChatMessageAttachedContentNodeMediaFlags() - if webpage.instantPage == nil { - flags.insert(.preferMediaInline) - } + let flags = ChatMessageAttachedContentNodeMediaFlags() mediaAndFlags = (image, flags) } } else if let story = mainMedia as? TelegramMediaStory { @@ -441,6 +463,10 @@ public final class ChatMessageWebpageBubbleContentNode: ChatMessageBubbleContent } } + if defaultWebpageImageSizeIsSmall(webpage: webpage) { + mediaAndFlags?.1.insert(.preferMediaInline) + } + if let webPageContent, let isMediaLargeByDefault = webPageContent.isMediaLargeByDefault, !isMediaLargeByDefault { mediaAndFlags?.1.insert(.preferMediaInline) } else if let attribute = item.message.attributes.first(where: { $0 is WebpagePreviewMessageAttribute }) as? WebpagePreviewMessageAttribute { diff --git a/submodules/TelegramUI/Sources/Chat/ChatMessageActionOptions.swift b/submodules/TelegramUI/Sources/Chat/ChatMessageActionOptions.swift index 8e5851a995..8383797963 100644 --- a/submodules/TelegramUI/Sources/Chat/ChatMessageActionOptions.swift +++ b/submodules/TelegramUI/Sources/Chat/ChatMessageActionOptions.swift @@ -16,6 +16,7 @@ import TextFormat import ChatMessageItemView import ChatMessageBubbleItemNode import TelegramNotices +import ChatMessageWebpageBubbleContentNode private enum OptionsId: Hashable { case reply @@ -710,7 +711,13 @@ private func chatLinkOptions(selfController: ChatControllerImpl, sourceNode: ASD var largeMedia = false if webpageHasLargeMedia { - largeMedia = urlPreview.largeMedia ?? true + if let value = urlPreview.largeMedia { + largeMedia = value + } else if case let .Loaded(content) = urlPreview.webPage.content { + largeMedia = !defaultWebpageImageSizeIsSmall(webpage: content) + } else { + largeMedia = true + } } else { largeMedia = false }