diff --git a/submodules/TelegramCore/Sources/State/PeerInputActivityManager.swift b/submodules/TelegramCore/Sources/State/PeerInputActivityManager.swift index 892b6f21c6..06ddddb1fc 100644 --- a/submodules/TelegramCore/Sources/State/PeerInputActivityManager.swift +++ b/submodules/TelegramCore/Sources/State/PeerInputActivityManager.swift @@ -336,6 +336,10 @@ final class PeerInputActivityManager { timeout = 8.0 } + if activity == .choosingSticker { + context.removeActivity(peerId: peerId, activity: .typingText, episodeId: nil) + } + context.addActivity(peerId: peerId, activity: activity, timeout: timeout, episodeId: episodeId, nextUpdateId: &self.nextUpdateId) if let globalContext = self.globalContext { diff --git a/submodules/TelegramUI/Sources/ChatController.swift b/submodules/TelegramUI/Sources/ChatController.swift index 05993b6d52..c6a6826aae 100644 --- a/submodules/TelegramUI/Sources/ChatController.swift +++ b/submodules/TelegramUI/Sources/ChatController.swift @@ -3889,6 +3889,9 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G } |> deliverOnMainQueue).start(next: { [weak self] value in if let strongSelf = self { + if value { + strongSelf.context.account.updateLocalInputActivity(peerId: activitySpace, activity: .typingText, isPresent: false) + } strongSelf.context.account.updateLocalInputActivity(peerId: activitySpace, activity: .choosingSticker, isPresent: value) } }) diff --git a/submodules/TelegramUI/Sources/ChatMessageAnimatedStickerItemNode.swift b/submodules/TelegramUI/Sources/ChatMessageAnimatedStickerItemNode.swift index 8142ce705e..2035402099 100644 --- a/submodules/TelegramUI/Sources/ChatMessageAnimatedStickerItemNode.swift +++ b/submodules/TelegramUI/Sources/ChatMessageAnimatedStickerItemNode.swift @@ -523,7 +523,23 @@ class ChatMessageAnimatedStickerItemNode: ChatMessageItemView { } self.updateVisibility() - if let animationItems = item.associatedData.additionalAnimatedEmojiStickers[item.message.text.strippedEmoji] { + let textEmoji = item.message.text.strippedEmoji + var additionalTextEmoji = textEmoji + let (basicEmoji, fitz) = item.message.text.basicEmoji + if ["๐Ÿ’›", "๐Ÿ’™", "๐Ÿ’š", "๐Ÿ’œ", "๐Ÿงก", "๐Ÿ–ค"].contains(textEmoji) { + additionalTextEmoji = "โค๏ธ".strippedEmoji + } else if fitz != nil { + additionalTextEmoji = basicEmoji + } + + var animationItems: [Int: StickerPackItem]? + if let items = item.associatedData.additionalAnimatedEmojiStickers[item.message.text.strippedEmoji] { + animationItems = items + } else if let items = item.associatedData.additionalAnimatedEmojiStickers[additionalTextEmoji] { + animationItems = items + } + + if let animationItems = animationItems { for (_, animationItem) in animationItems { self.disposables.add(freeMediaFileInteractiveFetched(account: item.context.account, fileReference: .standalone(media: animationItem.file)).start()) } @@ -1405,7 +1421,15 @@ class ChatMessageAnimatedStickerItemNode: ChatMessageItemView { } let textEmoji = item.message.text.strippedEmoji - guard let animationItems = item.associatedData.additionalAnimatedEmojiStickers[textEmoji], index < 10, let file = animationItems[index]?.file else { + var additionalTextEmoji = textEmoji + let (basicEmoji, fitz) = item.message.text.basicEmoji + if ["๐Ÿ’›", "๐Ÿ’™", "๐Ÿ’š", "๐Ÿ’œ", "๐Ÿงก", "๐Ÿ–ค"].contains(textEmoji) { + additionalTextEmoji = "โค๏ธ".strippedEmoji + } else if fitz != nil { + additionalTextEmoji = basicEmoji + } + + guard let animationItems = item.associatedData.additionalAnimatedEmojiStickers[additionalTextEmoji], index < 10, let file = animationItems[index]?.file else { return } let source = AnimatedStickerResourceSource(account: item.context.account, resource: file.resource, fitzModifier: nil) @@ -1564,11 +1588,19 @@ class ChatMessageAnimatedStickerItemNode: ChatMessageItemView { let text = item.message.text if var firstScalar = text.unicodeScalars.first { var textEmoji = text.strippedEmoji - let originalTextEmoji = textEmoji + var additionalTextEmoji = textEmoji if beatingHearts.contains(firstScalar.value) { textEmoji = "โค๏ธ" firstScalar = UnicodeScalar(heart)! } + + let (basicEmoji, fitz) = text.basicEmoji + if ["๐Ÿ’›", "๐Ÿ’™", "๐Ÿ’š", "๐Ÿ’œ", "๐Ÿงก", "๐Ÿ–ค", "โค๏ธ"].contains(textEmoji) { + additionalTextEmoji = "โค๏ธ".strippedEmoji + } else if fitz != nil { + additionalTextEmoji = basicEmoji + } + return .optionalAction({ var haptic: EmojiHaptic? if let current = self.haptic { @@ -1585,7 +1617,7 @@ class ChatMessageAnimatedStickerItemNode: ChatMessageItemView { self.haptic = haptic } - if let animationItems = item.associatedData.additionalAnimatedEmojiStickers[originalTextEmoji] { + if let animationItems = item.associatedData.additionalAnimatedEmojiStickers[additionalTextEmoji] { let syncAnimations = item.message.id.peerId.namespace == Namespaces.Peer.CloudUser let playHaptic = haptic == nil