diff --git a/submodules/TelegramUI/BUILD b/submodules/TelegramUI/BUILD index b647e26741..da34cbb409 100644 --- a/submodules/TelegramUI/BUILD +++ b/submodules/TelegramUI/BUILD @@ -371,6 +371,7 @@ swift_library( "//submodules/TelegramUI/Components/Chat/ChatMessageAttachedContentButtonNode", "//submodules/TelegramUI/Components/Chat/ChatMessageWebpageBubbleContentNode", "//submodules/TelegramUI/Components/Chat/ChatMessageItem", + "//submodules/TelegramUI/Components/Chat/ChatMessageItemView", ] + select({ "@build_bazel_rules_apple//apple:ios_arm64": appcenter_targets, "//build-system:ios_sim_arm64": [], diff --git a/submodules/TelegramUI/Components/Chat/ChatMessageItem/Sources/ChatMessageItem.swift b/submodules/TelegramUI/Components/Chat/ChatMessageItem/Sources/ChatMessageItem.swift index 7775fd2112..ac38ef18a7 100644 --- a/submodules/TelegramUI/Components/Chat/ChatMessageItem/Sources/ChatMessageItem.swift +++ b/submodules/TelegramUI/Components/Chat/ChatMessageItem/Sources/ChatMessageItem.swift @@ -84,6 +84,25 @@ public enum ChatMessageItemAdditionalContent { case eventLogPreviousLink(Message) } +public enum ChatMessageMerge: Int32 { + case none = 0 + case fullyMerged = 1 + case semanticallyMerged = 2 + + public var merged: Bool { + if case .none = self { + return false + } else { + return true + } + } +} + +public protocol ChatMessageAvatarHeaderNode: ListViewItemHeaderNode { + func updateSelectionState(animated: Bool) + func updateSublayerTransformOffset(layer: CALayer, offset: CGPoint) +} + public protocol ChatMessageItem: ListViewItem { var presentationData: ChatPresentationData { get } var context: AccountContext { get } @@ -102,4 +121,6 @@ public protocol ChatMessageItem: ListViewItem { var unsent: Bool { get } var sending: Bool { get } var failed: Bool { get } + + func mergedWithItems(top: ListViewItem?, bottom: ListViewItem?) -> (top: ChatMessageMerge, bottom: ChatMessageMerge, dateAtBottom: Bool) } diff --git a/submodules/TelegramUI/Components/Chat/ChatMessageItemView/BUILD b/submodules/TelegramUI/Components/Chat/ChatMessageItemView/BUILD new file mode 100644 index 0000000000..597406f49a --- /dev/null +++ b/submodules/TelegramUI/Components/Chat/ChatMessageItemView/BUILD @@ -0,0 +1,31 @@ +load("@build_bazel_rules_swift//swift:swift.bzl", "swift_library") + +swift_library( + name = "ChatMessageItemView", + module_name = "ChatMessageItemView", + srcs = glob([ + "Sources/**/*.swift", + ]), + copts = [ + "-warnings-as-errors", + ], + deps = [ + "//submodules/AsyncDisplayKit", + "//submodules/Display", + "//submodules/Postbox", + "//submodules/TelegramCore", + "//submodules/AccountContext", + "//submodules/LocalizedPeerData", + "//submodules/ContextUI", + "//submodules/ChatListUI", + "//submodules/TelegramPresentationData", + "//submodules/SSignalKit/SwiftSignalKit", + "//submodules/TelegramUI/Components/ChatControllerInteraction", + "//submodules/TelegramUI/Components/Chat/ChatMessageItemCommon", + "//submodules/TextFormat", + "//submodules/TelegramUI/Components/Chat/ChatMessageItem", + ], + visibility = [ + "//visibility:public", + ], +) diff --git a/submodules/TelegramUI/Sources/ChatMessageItemView.swift b/submodules/TelegramUI/Components/Chat/ChatMessageItemView/Sources/ChatMessageItemView.swift similarity index 94% rename from submodules/TelegramUI/Sources/ChatMessageItemView.swift rename to submodules/TelegramUI/Components/Chat/ChatMessageItemView/Sources/ChatMessageItemView.swift index f07d5f4aa3..dfc51036b8 100644 --- a/submodules/TelegramUI/Sources/ChatMessageItemView.swift +++ b/submodules/TelegramUI/Components/Chat/ChatMessageItemView/Sources/ChatMessageItemView.swift @@ -614,14 +614,14 @@ public final class ChatMessageAccessibilityData { } } -public class ChatMessageItemView: ListViewItemNode, ChatMessageItemNodeProtocol { - let layoutConstants = (ChatMessageItemLayoutConstants.compact, ChatMessageItemLayoutConstants.regular) +open class ChatMessageItemView: ListViewItemNode, ChatMessageItemNodeProtocol { + public let layoutConstants = (ChatMessageItemLayoutConstants.compact, ChatMessageItemLayoutConstants.regular) - var item: ChatMessageItem? - var accessibilityData: ChatMessageAccessibilityData? - var safeInsets = UIEdgeInsets() + open var item: ChatMessageItem? + open var accessibilityData: ChatMessageAccessibilityData? + open var safeInsets = UIEdgeInsets() - var awaitingAppliedReaction: (MessageReaction.Reaction?, () -> Void)? + open var awaitingAppliedReaction: (MessageReaction.Reaction?, () -> Void)? public required convenience init() { self.init(layerBacked: false) @@ -636,23 +636,23 @@ public class ChatMessageItemView: ListViewItemNode, ChatMessageItemNodeProtocol fatalError("init(coder:) has not been implemented") } - override public func reuse() { + override open func reuse() { super.reuse() self.item = nil self.frame = CGRect() } - func setupItem(_ item: ChatMessageItem, synchronousLoad: Bool) { + open func setupItem(_ item: ChatMessageItem, synchronousLoad: Bool) { self.item = item } - func updateAccessibilityData(_ accessibilityData: ChatMessageAccessibilityData) { + open func updateAccessibilityData(_ accessibilityData: ChatMessageAccessibilityData) { self.accessibilityData = accessibilityData } - override public func layoutForParams(_ params: ListViewItemLayoutParams, item: ListViewItem, previousItem: ListViewItem?, nextItem: ListViewItem?) { - if let item = item as? ChatMessageItemImpl { + override open func layoutForParams(_ params: ListViewItemLayoutParams, item: ListViewItem, previousItem: ListViewItem?, nextItem: ListViewItem?) { + if let item = item as? ChatMessageItem { let doLayout = self.asyncLayout() let merged = item.mergedWithItems(top: previousItem, bottom: nextItem) let (layout, apply) = doLayout(item, params, merged.top, merged.bottom, merged.dateAtBottom) @@ -662,10 +662,10 @@ public class ChatMessageItemView: ListViewItemNode, ChatMessageItemNodeProtocol } } - func cancelInsertionAnimations() { + open func cancelInsertionAnimations() { } - override public func animateInsertion(_ currentTimestamp: Double, duration: Double, short: Bool) { + override open func animateInsertion(_ currentTimestamp: Double, duration: Double, short: Bool) { if short { //self.layer.animateBoundsOriginYAdditive(from: -self.bounds.size.height, to: 0.0, duration: 0.4, timingFunction: kCAMediaTimingFunctionSpring) } else { @@ -674,7 +674,7 @@ public class ChatMessageItemView: ListViewItemNode, ChatMessageItemNodeProtocol } } - func asyncLayout() -> (_ item: ChatMessageItem, _ params: ListViewItemLayoutParams, _ mergedTop: ChatMessageMerge, _ mergedBottom: ChatMessageMerge, _ dateHeaderAtBottom: Bool) -> (ListViewItemNodeLayout, (ListViewItemUpdateAnimation, ListViewItemApply, Bool) -> Void) { + open func asyncLayout() -> (_ item: ChatMessageItem, _ params: ListViewItemLayoutParams, _ mergedTop: ChatMessageMerge, _ mergedBottom: ChatMessageMerge, _ dateHeaderAtBottom: Bool) -> (ListViewItemNodeLayout, (ListViewItemUpdateAnimation, ListViewItemApply, Bool) -> Void) { return { _, _, _, _, _ in return (ListViewItemNodeLayout(contentSize: CGSize(width: 32.0, height: 32.0), insets: UIEdgeInsets()), { _, _, _ in @@ -682,24 +682,24 @@ public class ChatMessageItemView: ListViewItemNode, ChatMessageItemNodeProtocol } } - func transitionNode(id: MessageId, media: Media, adjustRect: Bool) -> (ASDisplayNode, CGRect, () -> (UIView?, UIView?))? { + open func transitionNode(id: MessageId, media: Media, adjustRect: Bool) -> (ASDisplayNode, CGRect, () -> (UIView?, UIView?))? { return nil } - func getMessageContextSourceNode(stableId: UInt32?) -> ContextExtractedContentContainingNode? { + open func getMessageContextSourceNode(stableId: UInt32?) -> ContextExtractedContentContainingNode? { return nil } - func updateHiddenMedia() { + open func updateHiddenMedia() { } - func updateSelectionState(animated: Bool) { + open func updateSelectionState(animated: Bool) { } - func updateSearchTextHighlightState() { + open func updateSearchTextHighlightState() { } - func updateHighlightedState(animated: Bool) { + open func updateHighlightedState(animated: Bool) { var isHighlightedInOverlay = false if let item = self.item, let contextHighlightedState = item.controllerInteraction.contextHighlightedState { switch item.content { @@ -719,17 +719,17 @@ public class ChatMessageItemView: ListViewItemNode, ChatMessageItemNodeProtocol self.isHighlightedInOverlay = isHighlightedInOverlay } - func updateAutomaticMediaDownloadSettings() { + open func updateAutomaticMediaDownloadSettings() { } - func updateStickerSettings(forceStopAnimations: Bool) { + open func updateStickerSettings(forceStopAnimations: Bool) { } - func playMediaWithSound() -> ((Double?) -> Void, Bool, Bool, Bool, ASDisplayNode?)? { + open func playMediaWithSound() -> ((Double?) -> Void, Bool, Bool, Bool, ASDisplayNode?)? { return nil } - override public func headers() -> [ListViewItemHeader]? { + override open func headers() -> [ListViewItemHeader]? { if let item = self.item { return item.headers } else { @@ -737,7 +737,7 @@ public class ChatMessageItemView: ListViewItemNode, ChatMessageItemNodeProtocol } } - func performMessageButtonAction(button: ReplyMarkupButton) { + open func performMessageButtonAction(button: ReplyMarkupButton) { if let item = self.item { switch button.action { case .text: @@ -800,7 +800,7 @@ public class ChatMessageItemView: ListViewItemNode, ChatMessageItemNodeProtocol } } - func presentMessageButtonContextMenu(button: ReplyMarkupButton) { + open func presentMessageButtonContextMenu(button: ReplyMarkupButton) { if let item = self.item { switch button.action { case let .url(url): @@ -811,24 +811,24 @@ public class ChatMessageItemView: ListViewItemNode, ChatMessageItemNodeProtocol } } - func openMessageContextMenu() { + open func openMessageContextMenu() { } - public func targetReactionView(value: MessageReaction.Reaction) -> UIView? { + open func targetReactionView(value: MessageReaction.Reaction) -> UIView? { return nil } - public func targetForStoryTransition(id: StoryId) -> UIView? { + open func targetForStoryTransition(id: StoryId) -> UIView? { return nil } - func getStatusNode() -> ASDisplayNode? { + open func getStatusNode() -> ASDisplayNode? { return nil } private var attachedAvatarNodeOffset: CGFloat = 0.0 - override public func attachedHeaderNodesUpdated() { + override open func attachedHeaderNodesUpdated() { if !self.attachedAvatarNodeOffset.isZero { self.updateAttachedAvatarNodeOffset(offset: self.attachedAvatarNodeOffset, transition: .immediate) } else { @@ -840,7 +840,7 @@ public class ChatMessageItemView: ListViewItemNode, ChatMessageItemNodeProtocol } } - func updateAttachedAvatarNodeOffset(offset: CGFloat, transition: ContainedViewLayoutTransition) { + open func updateAttachedAvatarNodeOffset(offset: CGFloat, transition: ContainedViewLayoutTransition) { self.attachedAvatarNodeOffset = offset for headerNode in self.attachedHeaderNodes { if let headerNode = headerNode as? ChatMessageAvatarHeaderNode { @@ -849,10 +849,10 @@ public class ChatMessageItemView: ListViewItemNode, ChatMessageItemNodeProtocol } } - func unreadMessageRangeUpdated() { + open func unreadMessageRangeUpdated() { } - public func contentFrame() -> CGRect { + open func contentFrame() -> CGRect { return self.bounds } } diff --git a/submodules/TelegramUI/Sources/Chat/ChatMessageActionOptions.swift b/submodules/TelegramUI/Sources/Chat/ChatMessageActionOptions.swift index 6c04b0c34c..917900adaf 100644 --- a/submodules/TelegramUI/Sources/Chat/ChatMessageActionOptions.swift +++ b/submodules/TelegramUI/Sources/Chat/ChatMessageActionOptions.swift @@ -13,6 +13,7 @@ import ChatInterfaceState import PresentationDataUtils import ChatMessageTextBubbleContentNode import TextFormat +import ChatMessageItemView private enum OptionsId: Hashable { case reply diff --git a/submodules/TelegramUI/Sources/ChatController.swift b/submodules/TelegramUI/Sources/ChatController.swift index 5e648d99fd..abfbc28314 100644 --- a/submodules/TelegramUI/Sources/ChatController.swift +++ b/submodules/TelegramUI/Sources/ChatController.swift @@ -107,6 +107,8 @@ import ChatMessageDateAndStatusNode import ReplyAccessoryPanelNode import TextSelectionNode import ChatMessagePollBubbleContentNode +import ChatMessageItem +import ChatMessageItemView public enum ChatControllerPeekActions { case standard @@ -1349,7 +1351,7 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G }, openPeer: { [weak self] peer, navigation, fromMessage, source in var expandAvatar = false if case let .groupParticipant(storyStats, avatarHeaderNode) = source { - if let storyStats, storyStats.totalCount != 0, let avatarHeaderNode = avatarHeaderNode as? ChatMessageAvatarHeaderNode { + if let storyStats, storyStats.totalCount != 0, let avatarHeaderNode = avatarHeaderNode as? ChatMessageAvatarHeaderNodeImpl { self?.openStories(peerId: peer.id, avatarHeaderNode: avatarHeaderNode, avatarNode: nil) return } else { @@ -17400,7 +17402,7 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G }) } - func openStories(peerId: EnginePeer.Id, avatarHeaderNode: ChatMessageAvatarHeaderNode?, avatarNode: AvatarNode?) { + func openStories(peerId: EnginePeer.Id, avatarHeaderNode: ChatMessageAvatarHeaderNodeImpl?, avatarNode: AvatarNode?) { if let avatarNode = avatarHeaderNode?.avatarNode ?? avatarNode { StoryContainerScreen.openPeerStories(context: self.context, peerId: peerId, parentController: self, avatarNode: avatarNode) } diff --git a/submodules/TelegramUI/Sources/ChatControllerNode.swift b/submodules/TelegramUI/Sources/ChatControllerNode.swift index 46b555fe4b..9062053cfb 100644 --- a/submodules/TelegramUI/Sources/ChatControllerNode.swift +++ b/submodules/TelegramUI/Sources/ChatControllerNode.swift @@ -32,6 +32,7 @@ import ChatInputPanelNode import ChatInputContextPanelNode import TextSelectionNode import ReplyAccessoryPanelNode +import ChatMessageItemView final class VideoNavigationControllerDropContentItem: NavigationControllerDropContentItem { let itemNode: OverlayMediaItemNode diff --git a/submodules/TelegramUI/Sources/ChatHistoryListNode.swift b/submodules/TelegramUI/Sources/ChatHistoryListNode.swift index 269faa659c..aef74ea964 100644 --- a/submodules/TelegramUI/Sources/ChatHistoryListNode.swift +++ b/submodules/TelegramUI/Sources/ChatHistoryListNode.swift @@ -27,6 +27,7 @@ import ChatHistoryEntry import ChatOverscrollControl import ChatBotInfoItem import ChatMessageItem +import ChatMessageItemView extension ChatReplyThreadMessage { var effectiveTopId: MessageId { @@ -1769,7 +1770,7 @@ public final class ChatHistoryListNode: ListView, ChatHistoryNode { strongSelf.forEachItemHeaderNode { itemHeaderNode in if let dateNode = itemHeaderNode as? ChatMessageDateHeaderNode { dateNode.updatePresentationData(chatPresentationData, context: strongSelf.context) - } else if let avatarNode = itemHeaderNode as? ChatMessageAvatarHeaderNode { + } else if let avatarNode = itemHeaderNode as? ChatMessageAvatarHeaderNodeImpl { avatarNode.updatePresentationData(chatPresentationData, context: strongSelf.context) } else if let dateNode = itemHeaderNode as? ListMessageDateHeaderNode { dateNode.updateThemeAndStrings(theme: presentationData.theme, strings: presentationData.strings) diff --git a/submodules/TelegramUI/Sources/ChatHistorySearchContainerNode.swift b/submodules/TelegramUI/Sources/ChatHistorySearchContainerNode.swift index fd150168c3..305ed8490d 100644 --- a/submodules/TelegramUI/Sources/ChatHistorySearchContainerNode.swift +++ b/submodules/TelegramUI/Sources/ChatHistorySearchContainerNode.swift @@ -12,6 +12,7 @@ import SearchUI import TelegramUIPreferences import ListMessageItem import ChatControllerInteraction +import ChatMessageItemView private enum ChatHistorySearchEntryStableId: Hashable { case messageId(MessageId) diff --git a/submodules/TelegramUI/Sources/ChatInterfaceStateContextMenus.swift b/submodules/TelegramUI/Sources/ChatInterfaceStateContextMenus.swift index dce7f8e242..374ceedf7f 100644 --- a/submodules/TelegramUI/Sources/ChatInterfaceStateContextMenus.swift +++ b/submodules/TelegramUI/Sources/ChatInterfaceStateContextMenus.swift @@ -34,6 +34,7 @@ import PremiumUI import TextNodeWithEntities import ChatControllerInteraction import ChatMessageItemCommon +import ChatMessageItemView private struct MessageContextMenuData { let starStatus: Bool? diff --git a/submodules/TelegramUI/Sources/ChatLoadingNode.swift b/submodules/TelegramUI/Sources/ChatLoadingNode.swift index b194b51613..fd56b2abff 100644 --- a/submodules/TelegramUI/Sources/ChatLoadingNode.swift +++ b/submodules/TelegramUI/Sources/ChatLoadingNode.swift @@ -10,6 +10,8 @@ import WallpaperBackgroundNode import ShimmerEffect import ChatPresentationInterfaceState import AccountContext +import ChatMessageItem +import ChatMessageItemView final class ChatLoadingNode: ASDisplayNode { private let backgroundNode: NavigationBackgroundNode diff --git a/submodules/TelegramUI/Sources/ChatMessageAnimatedStickerItemNode.swift b/submodules/TelegramUI/Sources/ChatMessageAnimatedStickerItemNode.swift index e8f1eea2ec..71b2e97e36 100644 --- a/submodules/TelegramUI/Sources/ChatMessageAnimatedStickerItemNode.swift +++ b/submodules/TelegramUI/Sources/ChatMessageAnimatedStickerItemNode.swift @@ -34,6 +34,7 @@ import ChatMessageItemCommon import ChatMessageBubbleContentNode import ChatMessageReplyInfoNode import ChatMessageItem +import ChatMessageItemView private let nameFont = Font.medium(14.0) private let inlineBotPrefixFont = Font.regular(14.0) diff --git a/submodules/TelegramUI/Sources/ChatMessageBubbleItemNode.swift b/submodules/TelegramUI/Sources/ChatMessageBubbleItemNode.swift index a94dec1c2b..c8197a2b80 100644 --- a/submodules/TelegramUI/Sources/ChatMessageBubbleItemNode.swift +++ b/submodules/TelegramUI/Sources/ChatMessageBubbleItemNode.swift @@ -42,6 +42,7 @@ import ChatMessageFileBubbleContentNode import ChatMessageWebpageBubbleContentNode import ChatMessagePollBubbleContentNode import ChatMessageItem +import ChatMessageItemView enum InternalBubbleTapAction { case action(() -> Void) diff --git a/submodules/TelegramUI/Sources/ChatMessageContextControllerContentSource.swift b/submodules/TelegramUI/Sources/ChatMessageContextControllerContentSource.swift index cb99cd36d5..6ecbbd7f33 100644 --- a/submodules/TelegramUI/Sources/ChatMessageContextControllerContentSource.swift +++ b/submodules/TelegramUI/Sources/ChatMessageContextControllerContentSource.swift @@ -5,6 +5,7 @@ import ContextUI import Postbox import TelegramCore import SwiftSignalKit +import ChatMessageItemView final class ChatMessageContextLocationContentSource: ContextLocationContentSource { private let controller: ViewController diff --git a/submodules/TelegramUI/Sources/ChatMessageDateHeader.swift b/submodules/TelegramUI/Sources/ChatMessageDateHeader.swift index c48afe8e2b..da8c351f1d 100644 --- a/submodules/TelegramUI/Sources/ChatMessageDateHeader.swift +++ b/submodules/TelegramUI/Sources/ChatMessageDateHeader.swift @@ -15,6 +15,7 @@ import HierarchyTrackingLayer import WallpaperBackgroundNode import ChatControllerInteraction import AvatarVideoNode +import ChatMessageItem private let timezoneOffset: Int32 = { let nowTimestamp = Int32(CFAbsoluteTimeGetCurrent() + NSTimeIntervalSince1970) @@ -416,11 +417,11 @@ final class ChatMessageAvatarHeader: ListViewItemHeader { } func node(synchronousLoad: Bool) -> ListViewItemHeaderNode { - return ChatMessageAvatarHeaderNode(peerId: self.peerId, peer: self.peer, messageReference: self.messageReference, adMessageId: self.adMessageId, presentationData: self.presentationData, context: self.context, controllerInteraction: self.controllerInteraction, storyStats: self.storyStats, synchronousLoad: synchronousLoad) + return ChatMessageAvatarHeaderNodeImpl(peerId: self.peerId, peer: self.peer, messageReference: self.messageReference, adMessageId: self.adMessageId, presentationData: self.presentationData, context: self.context, controllerInteraction: self.controllerInteraction, storyStats: self.storyStats, synchronousLoad: synchronousLoad) } func updateNode(_ node: ListViewItemHeaderNode, previous: ListViewItemHeader?, next: ListViewItemHeader?) { - guard let node = node as? ChatMessageAvatarHeaderNode else { + guard let node = node as? ChatMessageAvatarHeaderNodeImpl else { return } node.updatePresentationData(self.presentationData, context: self.context) @@ -432,7 +433,7 @@ private let avatarFont = avatarPlaceholderFont(size: 16.0) private let maxVideoLoopCount = 3 -final class ChatMessageAvatarHeaderNode: ListViewItemHeaderNode { +final class ChatMessageAvatarHeaderNodeImpl: ListViewItemHeaderNode { private let context: AccountContext private var presentationData: ChatPresentationData private let controllerInteraction: ChatControllerInteraction diff --git a/submodules/TelegramUI/Sources/ChatMessageInstantVideoItemNode.swift b/submodules/TelegramUI/Sources/ChatMessageInstantVideoItemNode.swift index fdd9d7293d..e7a3aa5990 100644 --- a/submodules/TelegramUI/Sources/ChatMessageInstantVideoItemNode.swift +++ b/submodules/TelegramUI/Sources/ChatMessageInstantVideoItemNode.swift @@ -20,6 +20,7 @@ import ChatMessageBubbleContentNode import ChatMessageReplyInfoNode import ChatMessageInteractiveInstantVideoNode import ChatMessageItem +import ChatMessageItemView private let nameFont = Font.medium(14.0) diff --git a/submodules/TelegramUI/Sources/ChatMessageItemImpl.swift b/submodules/TelegramUI/Sources/ChatMessageItemImpl.swift index b7ddcec3ac..8c9d792683 100644 --- a/submodules/TelegramUI/Sources/ChatMessageItemImpl.swift +++ b/submodules/TelegramUI/Sources/ChatMessageItemImpl.swift @@ -13,6 +13,7 @@ import PersistentStringHash import ChatControllerInteraction import ChatHistoryEntry import ChatMessageItem +import ChatMessageItemView private func mediaMergeableStyle(_ media: Media) -> ChatMessageMerge { if let story = media as? TelegramMediaStory, story.isMention { @@ -165,20 +166,6 @@ func chatItemsHaveCommonDateHeader(_ lhs: ListViewItem, _ rhs: ListViewItem?) - } } -enum ChatMessageMerge: Int32 { - case none = 0 - case fullyMerged = 1 - case semanticallyMerged = 2 - - var merged: Bool { - if case .none = self { - return false - } else { - return true - } - } -} - public final class ChatMessageItemImpl: ChatMessageItem, CustomStringConvertible { public let presentationData: ChatPresentationData public let context: AccountContext @@ -471,7 +458,7 @@ public final class ChatMessageItemImpl: ChatMessageItem, CustomStringConvertible } } - final func mergedWithItems(top: ListViewItem?, bottom: ListViewItem?) -> (top: ChatMessageMerge, bottom: ChatMessageMerge, dateAtBottom: Bool) { + public func mergedWithItems(top: ListViewItem?, bottom: ListViewItem?) -> (top: ChatMessageMerge, bottom: ChatMessageMerge, dateAtBottom: Bool) { var mergedTop: ChatMessageMerge = .none var mergedBottom: ChatMessageMerge = .none var dateAtBottom = false diff --git a/submodules/TelegramUI/Sources/ChatMessageStickerItemNode.swift b/submodules/TelegramUI/Sources/ChatMessageStickerItemNode.swift index 83435f8fbf..6fb867c683 100644 --- a/submodules/TelegramUI/Sources/ChatMessageStickerItemNode.swift +++ b/submodules/TelegramUI/Sources/ChatMessageStickerItemNode.swift @@ -19,6 +19,7 @@ import ChatMessageDateAndStatusNode import ChatMessageItemCommon import ChatMessageReplyInfoNode import ChatMessageItem +import ChatMessageItemView private let nameFont = Font.medium(14.0) private let inlineBotPrefixFont = Font.regular(14.0) diff --git a/submodules/TelegramUI/Sources/ChatMessageTransitionNode.swift b/submodules/TelegramUI/Sources/ChatMessageTransitionNode.swift index 02fc77f16f..fbdb412c3e 100644 --- a/submodules/TelegramUI/Sources/ChatMessageTransitionNode.swift +++ b/submodules/TelegramUI/Sources/ChatMessageTransitionNode.swift @@ -13,6 +13,7 @@ import ChatControllerInteraction import FeaturedStickersScreen import ChatTextInputMediaRecordingButton import ReplyAccessoryPanelNode +import ChatMessageItemView private func convertAnimatingSourceRect(_ rect: CGRect, fromView: UIView, toView: UIView?) -> CGRect { if let presentationLayer = fromView.layer.presentation() { diff --git a/submodules/TelegramUI/Sources/ChatRecentActionsControllerNode.swift b/submodules/TelegramUI/Sources/ChatRecentActionsControllerNode.swift index 31ebd96f62..a3576e10e5 100644 --- a/submodules/TelegramUI/Sources/ChatRecentActionsControllerNode.swift +++ b/submodules/TelegramUI/Sources/ChatRecentActionsControllerNode.swift @@ -28,6 +28,7 @@ import ContextUI import Pasteboard import ChatControllerInteraction import ChatPresentationInterfaceState +import ChatMessageItemView private final class ChatRecentActionsListOpaqueState { let entries: [ChatRecentActionsEntry] diff --git a/submodules/TelegramUI/Sources/PeerInfo/Panes/PeerInfoListPaneNode.swift b/submodules/TelegramUI/Sources/PeerInfo/Panes/PeerInfoListPaneNode.swift index 743bd62cfd..092baf8935 100644 --- a/submodules/TelegramUI/Sources/PeerInfo/Panes/PeerInfoListPaneNode.swift +++ b/submodules/TelegramUI/Sources/PeerInfo/Panes/PeerInfoListPaneNode.swift @@ -17,6 +17,7 @@ import UndoUI import ChatPresentationInterfaceState import ChatControllerInteraction import PeerInfoVisualMediaPaneNode +import ChatMessageItemView final class PeerInfoListPaneNode: ASDisplayNode, PeerInfoPaneNode { private let context: AccountContext