diff --git a/submodules/AnimatedStickerNode/Sources/AnimatedStickerNode.swift b/submodules/AnimatedStickerNode/Sources/AnimatedStickerNode.swift index 6178722b8c..2fa0012fc9 100644 --- a/submodules/AnimatedStickerNode/Sources/AnimatedStickerNode.swift +++ b/submodules/AnimatedStickerNode/Sources/AnimatedStickerNode.swift @@ -489,7 +489,7 @@ public final class DefaultAnimatedStickerNodeImpl: ASDisplayNode, AnimatedSticke let duration: Double = frameSource.frameRate > 0 ? Double(frameSource.frameCount) / Double(frameSource.frameRate) : 0 let frameRate = frameSource.frameRate - let timer = SwiftSignalKit.Timer(timeout: 1.0 / Double(frameRate), repeat: !firstFrame, completion: { + let timerEvent: () -> Void = { let frame = frameQueue.syncWith { frameQueue in return frameQueue.take(draw: true) } @@ -544,8 +544,13 @@ public final class DefaultAnimatedStickerNodeImpl: ASDisplayNode, AnimatedSticke frameQueue.with { frameQueue in frameQueue.generateFramesIfNeeded() } + } + + let timer = SwiftSignalKit.Timer(timeout: 1.0 / Double(frameRate), repeat: !firstFrame, completion: { + timerEvent() }, queue: queue) let _ = timerHolder.swap(timer) + timerEvent() timer.start() } } else { diff --git a/submodules/TelegramCore/Sources/TelegramEngine/Messages/MessageReadStats.swift b/submodules/TelegramCore/Sources/TelegramEngine/Messages/MessageReadStats.swift index f7638f5c8c..8b5f743e85 100644 --- a/submodules/TelegramCore/Sources/TelegramEngine/Messages/MessageReadStats.swift +++ b/submodules/TelegramCore/Sources/TelegramEngine/Messages/MessageReadStats.swift @@ -43,26 +43,25 @@ func _internal_messageReadStats(account: Account, id: MessageId) -> Signal mapToSignal { result, reactionCount -> Signal in - guard let result = result else { - return .single(nil) - } return account.postbox.transaction { transaction -> (peerIds: [PeerId], missingPeerIds: [PeerId]) in var peerIds: [PeerId] = [] var missingPeerIds: [PeerId] = [] let authorId = transaction.getMessage(id)?.author?.id - for id in result { - let peerId = PeerId(namespace: Namespaces.Peer.CloudUser, id: PeerId.Id._internalFromInt64Value(id)) - if peerId == account.peerId { - continue - } - if peerId == authorId { - continue - } - peerIds.append(peerId) - if transaction.getPeer(peerId) == nil { - missingPeerIds.append(peerId) + if let result = result { + for id in result { + let peerId = PeerId(namespace: Namespaces.Peer.CloudUser, id: PeerId.Id._internalFromInt64Value(id)) + if peerId == account.peerId { + continue + } + if peerId == authorId { + continue + } + peerIds.append(peerId) + if transaction.getPeer(peerId) == nil { + missingPeerIds.append(peerId) + } } } diff --git a/submodules/TelegramUI/Sources/ChatInterfaceStateContextMenus.swift b/submodules/TelegramUI/Sources/ChatInterfaceStateContextMenus.swift index 34431cf78a..4180590a27 100644 --- a/submodules/TelegramUI/Sources/ChatInterfaceStateContextMenus.swift +++ b/submodules/TelegramUI/Sources/ChatInterfaceStateContextMenus.swift @@ -211,12 +211,14 @@ private func canViewReadStats(message: Message, participantCount: Int?, isMessag case let channel as TelegramChannel: if case .broadcast = channel.info { return false - } else if let participantCount = participantCount { - if participantCount > maxParticipantCount { + } else { + if let participantCount = participantCount { + if participantCount > maxParticipantCount { + return false + } + } else { return false } - } else { - return false } case let group as TelegramGroup: if group.participantCount > maxParticipantCount { @@ -1571,19 +1573,17 @@ func contextMenuForChatPresentationInterfaceState(chatPresentationInterfaceState reactionCount = 0 } - var readStats = readStats + /*var readStats = readStats if !canViewStats { readStats = MessageReadStats(reactionCount: 0, peers: []) - } - - let reactionCount = readStats?.reactionCount ?? 0 + }*/ if hasReadReports || reactionCount != 0 { if !actions.isEmpty { actions.insert(.separator, at: 0) } - actions.insert(.custom(ChatReadReportContextItem(context: context, message: message, stats: readStats, action: { c, f, stats, customReactionEmojiPacks, firstCustomEmojiReaction in + actions.insert(.custom(ChatReadReportContextItem(context: context, message: message, hasReadReports: hasReadReports, stats: readStats, action: { c, f, stats, customReactionEmojiPacks, firstCustomEmojiReaction in if reactionCount == 0, let stats = stats, stats.peers.count == 1 { c.dismiss(completion: { controllerInteraction.openPeer(stats.peers[0].id, .default, nil, false, nil) @@ -2162,12 +2162,14 @@ private final class ChatDeleteMessageContextItemNode: ASDisplayNode, ContextMenu final class ChatReadReportContextItem: ContextMenuCustomItem { fileprivate let context: AccountContext fileprivate let message: Message + fileprivate let hasReadReports: Bool fileprivate let stats: MessageReadStats? fileprivate let action: (ContextControllerProtocol, @escaping (ContextMenuActionResult) -> Void, MessageReadStats?, [StickerPackCollectionInfo], TelegramMediaFile?) -> Void - init(context: AccountContext, message: Message, stats: MessageReadStats?, action: @escaping (ContextControllerProtocol, @escaping (ContextMenuActionResult) -> Void, MessageReadStats?, [StickerPackCollectionInfo], TelegramMediaFile?) -> Void) { + init(context: AccountContext, message: Message, hasReadReports: Bool, stats: MessageReadStats?, action: @escaping (ContextControllerProtocol, @escaping (ContextMenuActionResult) -> Void, MessageReadStats?, [StickerPackCollectionInfo], TelegramMediaFile?) -> Void) { self.context = context self.message = message + self.hasReadReports = hasReadReports self.stats = stats self.action = action } @@ -2380,7 +2382,7 @@ private final class ChatReadReportContextItemNode: ASDisplayNode, ContextMenuCus private var validLayout: (calculatedWidth: CGFloat, size: CGSize)? func updateStats(stats: MessageReadStats, transition: ContainedViewLayoutTransition) { - self.buttonNode.isUserInteractionEnabled = !stats.peers.isEmpty + self.buttonNode.isUserInteractionEnabled = !stats.peers.isEmpty || stats.reactionCount != 0 guard let (calculatedWidth, size) = self.validLayout else { return