From 3bbca0285cc7efd0d721ca87b5f0a297dc48e308 Mon Sep 17 00:00:00 2001 From: Peter <> Date: Wed, 3 Jul 2019 02:33:13 +0300 Subject: [PATCH] Don't set up animated sticker until message gets on screen --- .../ChatMessageAnimatedStickerItemNode.swift | 24 +++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/submodules/TelegramUI/TelegramUI/ChatMessageAnimatedStickerItemNode.swift b/submodules/TelegramUI/TelegramUI/ChatMessageAnimatedStickerItemNode.swift index d3443266cd..032263ed4d 100644 --- a/submodules/TelegramUI/TelegramUI/ChatMessageAnimatedStickerItemNode.swift +++ b/submodules/TelegramUI/TelegramUI/ChatMessageAnimatedStickerItemNode.swift @@ -16,6 +16,7 @@ private let inlineBotNameFont = nameFont class ChatMessageAnimatedStickerItemNode: ChatMessageItemView { let imageNode: TransformImageNode private let animationNode: AnimatedStickerNode + private var didSetUpAnimationNode = false private var swipeToReplyNode: ChatMessageSwipeToReplyNode? private var swipeToReplyFeedback: HapticFeedback? @@ -97,9 +98,25 @@ class ChatMessageAnimatedStickerItemNode: ChatMessageItemView { let isVisible = self.visibility != .none if wasVisible != isVisible { - if isVisible { + self.visibilityStatus = isVisible + } + } + } + + private var visibilityStatus: Bool = false { + didSet { + if self.visibilityStatus != oldValue { + if self.visibilityStatus { self.animationNode.visibility = true self.visibilityPromise.set(true) + if let item = self.item, !self.didSetUpAnimationNode { + for media in item.message.media { + if let telegramFile = media as? TelegramMediaFile { + self.didSetUpAnimationNode = true + self.animationNode.setup(account: item.context.account, resource: telegramFile.resource, width: 384, height: 384, mode: .cached) + } + } + } } else { self.animationNode.visibility = false self.visibilityPromise.set(false) @@ -116,7 +133,10 @@ class ChatMessageAnimatedStickerItemNode: ChatMessageItemView { if self.telegramFile?.id != telegramFile.id { self.telegramFile = telegramFile self.imageNode.setSignal(chatMessageAnimatedSticker(postbox: item.context.account.postbox, file: telegramFile, small: false, size: CGSize(width: 384.0, height: 384.0), thumbnail: false)) - self.animationNode.setup(account: item.context.account, resource: telegramFile.resource, width: 384, height: 384, mode: .cached) + if self.visibilityStatus { + self.didSetUpAnimationNode = true + self.animationNode.setup(account: item.context.account, resource: telegramFile.resource, width: 384, height: 384, mode: .cached) + } self.disposable.set(freeMediaFileInteractiveFetched(account: item.context.account, fileReference: .message(message: MessageReference(item.message), media: telegramFile)).start()) } break