diff --git a/submodules/TelegramUI/Components/Chat/ChatMessageAttachedContentNode/Sources/ChatMessageAttachedContentNode.swift b/submodules/TelegramUI/Components/Chat/ChatMessageAttachedContentNode/Sources/ChatMessageAttachedContentNode.swift index 6ea8b4fa38..a57e1fc1a1 100644 --- a/submodules/TelegramUI/Components/Chat/ChatMessageAttachedContentNode/Sources/ChatMessageAttachedContentNode.swift +++ b/submodules/TelegramUI/Components/Chat/ChatMessageAttachedContentNode/Sources/ChatMessageAttachedContentNode.swift @@ -249,6 +249,13 @@ public final class ChatMessageAttachedContentNode: ASDisplayNode { var contentMediaAutomaticPlayback: Bool = false var contentMediaAutomaticDownload: InteractiveMediaNodeAutodownloadMode = .none + var mediaAndFlags = mediaAndFlags + if let mediaAndFlagsValue = mediaAndFlags, let _ = mediaAndFlagsValue.0 as? TelegramMediaStory { + var flags = mediaAndFlagsValue.1 + flags.remove(.preferMediaInline) + mediaAndFlags = (mediaAndFlagsValue.0, flags) + } + var contentMediaAspectFilled = false if let (_, flags) = mediaAndFlags { contentMediaAspectFilled = flags.contains(.preferMediaAspectFilled) @@ -921,10 +928,12 @@ public final class ChatMessageAttachedContentNode: ASDisplayNode { } if updateMedia { - if let image = inlineMediaValue as? TelegramMediaImage { + let resolvedInlineMediaValue = inlineMediaValue + + if let image = resolvedInlineMediaValue as? TelegramMediaImage { let updateInlineImageSignal = chatWebpageSnippetPhoto(account: context.account, userLocation: .peer(message.id.peerId), photoReference: .message(message: MessageReference(message), media: image), placeholderColor: mainColor.withMultipliedAlpha(0.1)) inlineMedia.setSignal(updateInlineImageSignal) - } else if let file = inlineMediaValue as? TelegramMediaFile, let representation = file.previewRepresentations.last { + } else if let file = resolvedInlineMediaValue as? TelegramMediaFile, let representation = file.previewRepresentations.last { let updateInlineImageSignal = chatWebpageSnippetFile(account: context.account, userLocation: .peer(message.id.peerId), mediaReference: .message(message: MessageReference(message), media: file), representation: representation) inlineMedia.setSignal(updateInlineImageSignal) } diff --git a/submodules/TelegramUI/Components/Chat/ChatMessageWebpageBubbleContentNode/Sources/ChatMessageWebpageBubbleContentNode.swift b/submodules/TelegramUI/Components/Chat/ChatMessageWebpageBubbleContentNode/Sources/ChatMessageWebpageBubbleContentNode.swift index b90e86da91..3434154826 100644 --- a/submodules/TelegramUI/Components/Chat/ChatMessageWebpageBubbleContentNode/Sources/ChatMessageWebpageBubbleContentNode.swift +++ b/submodules/TelegramUI/Components/Chat/ChatMessageWebpageBubbleContentNode/Sources/ChatMessageWebpageBubbleContentNode.swift @@ -54,7 +54,7 @@ public final class ChatMessageWebpageBubbleContentNode: ChatMessageBubbleContent item.controllerInteraction.openTheme(item.message) return } else { - if content.embedUrl == nil && (content.title != nil || content.text != nil) { + if content.embedUrl == nil && (content.title != nil || content.text != nil) && content.story == nil { var shouldOpenUrl = true if let file = content.file { if !file.isVideo, !file.isVideoSticker, !file.isAnimated, !file.isAnimatedSticker, !file.isSticker, !file.isMusic { diff --git a/submodules/TelegramUI/Sources/ChatControllerNode.swift b/submodules/TelegramUI/Sources/ChatControllerNode.swift index 123fe48534..dff4f1438f 100644 --- a/submodules/TelegramUI/Sources/ChatControllerNode.swift +++ b/submodules/TelegramUI/Sources/ChatControllerNode.swift @@ -507,23 +507,40 @@ class ChatControllerNode: ASDisplayNode, UIScrollViewDelegate { source = .custom(messages: messages, messageId: messageIds.first ?? MessageId(peerId: PeerId(0), namespace: 0, id: 0), quote: reply.quote?.text, loadMore: nil) case let .link(link): let messages = link.options - |> mapToSignal { options -> Signal<(ChatControllerSubject.LinkOptions, Peer, Message?), NoError> in + |> mapToSignal { options -> Signal<(ChatControllerSubject.LinkOptions, Peer, Message?, [StoryId: CodableEntry]), NoError> in + let stories: Signal<[StoryId: CodableEntry], NoError> + if case let .Loaded(content) = options.webpage.content, let story = content.story { + stories = context.account.postbox.transaction { transaction -> [StoryId: CodableEntry] in + var result: [StoryId: CodableEntry] = [:] + if let storyValue = transaction.getStory(id: story.storyId) { + result[story.storyId] = storyValue + } + return result + } + } else { + stories = .single([:]) + } + if let replyMessageId = options.replyMessageId { return combineLatest( context.account.postbox.messagesAtIds([replyMessageId]), - context.account.postbox.loadedPeerWithId(context.account.peerId) + context.account.postbox.loadedPeerWithId(context.account.peerId), + stories ) - |> map { messages, peer -> (ChatControllerSubject.LinkOptions, Peer, Message?) in - return (options, peer, messages.first) + |> map { messages, peer, stories -> (ChatControllerSubject.LinkOptions, Peer, Message?, [StoryId: CodableEntry]) in + return (options, peer, messages.first, stories) } } else { - return context.account.postbox.loadedPeerWithId(context.account.peerId) - |> map { peer -> (ChatControllerSubject.LinkOptions, Peer, Message?) in - return (options, peer, nil) + return combineLatest( + context.account.postbox.loadedPeerWithId(context.account.peerId), + stories + ) + |> map { peer, stories -> (ChatControllerSubject.LinkOptions, Peer, Message?, [StoryId: CodableEntry]) in + return (options, peer, nil, stories) } } } - |> map { options, accountPeer, replyMessage -> ([Message], Int32, Bool) in + |> map { options, accountPeer, replyMessage, stories -> ([Message], Int32, Bool) in var peers = SimpleDictionary() peers[accountPeer.id] = accountPeer @@ -534,10 +551,11 @@ class ChatControllerNode: ASDisplayNode, UIScrollViewDelegate { media.append(TelegramMediaWebpage(webpageId: options.webpage.webpageId, content: .Loaded(content))) } + let associatedStories: [StoryId: CodableEntry] = stories + var attributes: [MessageAttribute] = [] attributes.append(TextEntitiesMessageAttribute(entities: options.messageEntities)) - attributes.append(WebpagePreviewMessageAttribute(leadingPreview: !options.linkBelowText, forceLargeMedia: options.largeMedia, isManuallyAdded: true, isSafe: false)) if let replyMessage { @@ -574,7 +592,7 @@ class ChatControllerNode: ASDisplayNode, UIScrollViewDelegate { associatedMessageIds: [], associatedMedia: [:], associatedThreadInfo: nil, - associatedStories: [:] + associatedStories: associatedStories ) return ([message], 1, false)