diff --git a/submodules/TelegramUI/BUILD b/submodules/TelegramUI/BUILD index 64bda2944a..64bb2f1086 100644 --- a/submodules/TelegramUI/BUILD +++ b/submodules/TelegramUI/BUILD @@ -340,6 +340,7 @@ swift_library( "//submodules/TelegramUI/Components/Chat/AccessoryPanelNode", "//submodules/TelegramUI/Components/Chat/ForwardAccessoryPanelNode", "//submodules/TelegramUI/Components/LegacyMessageInputPanel", + "//submodules/TelegramUI/Components/Chat/ChatMessageDateAndStatusNode", ] + select({ "@build_bazel_rules_apple//apple:ios_arm64": appcenter_targets, "//build-system:ios_sim_arm64": [], diff --git a/submodules/TelegramUI/Components/Chat/ChatMessageDateAndStatusNode/BUILD b/submodules/TelegramUI/Components/Chat/ChatMessageDateAndStatusNode/BUILD new file mode 100644 index 0000000000..8c63cac2d5 --- /dev/null +++ b/submodules/TelegramUI/Components/Chat/ChatMessageDateAndStatusNode/BUILD @@ -0,0 +1,29 @@ +load("@build_bazel_rules_swift//swift:swift.bzl", "swift_library") + +swift_library( + name = "ChatMessageDateAndStatusNode", + module_name = "ChatMessageDateAndStatusNode", + srcs = glob([ + "Sources/**/*.swift", + ]), + copts = [ + "-warnings-as-errors", + ], + deps = [ + "//submodules/AsyncDisplayKit", + "//submodules/Postbox", + "//submodules/TelegramCore", + "//submodules/Display", + "//submodules/SSignalKit/SwiftSignalKit", + "//submodules/TelegramPresentationData", + "//submodules/AccountContext", + "//submodules/AppBundle", + "//submodules/Components/ReactionButtonListComponent", + "//submodules/Components/ReactionImageComponent", + "//submodules/TelegramUI/Components/AnimationCache", + "//submodules/TelegramUI/Components/MultiAnimationRenderer", + ], + visibility = [ + "//visibility:public", + ], +) diff --git a/submodules/TelegramUI/Sources/ChatMessageDateAndStatusNode.swift b/submodules/TelegramUI/Components/Chat/ChatMessageDateAndStatusNode/Sources/ChatMessageDateAndStatusNode.swift similarity index 98% rename from submodules/TelegramUI/Sources/ChatMessageDateAndStatusNode.swift rename to submodules/TelegramUI/Components/Chat/ChatMessageDateAndStatusNode/Sources/ChatMessageDateAndStatusNode.swift index 45855f26e9..d1da259e64 100644 --- a/submodules/TelegramUI/Sources/ChatMessageDateAndStatusNode.swift +++ b/submodules/TelegramUI/Components/Chat/ChatMessageDateAndStatusNode/Sources/ChatMessageDateAndStatusNode.swift @@ -29,13 +29,13 @@ private func maybeAddRotationAnimation(_ layer: CALayer, duration: Double) { layer.add(basicAnimation, forKey: "clockFrameAnimation") } -enum ChatMessageDateAndStatusOutgoingType: Equatable { +public enum ChatMessageDateAndStatusOutgoingType: Equatable { case Sent(read: Bool) case Sending case Failed } -enum ChatMessageDateAndStatusType: Equatable { +public enum ChatMessageDateAndStatusType: Equatable { case BubbleIncoming case BubbleOutgoing(ChatMessageDateAndStatusOutgoingType) case ImageIncoming @@ -176,27 +176,27 @@ private final class StatusReactionNode: ASDisplayNode { } } -class ChatMessageDateAndStatusNode: ASDisplayNode { - struct TrailingReactionSettings { - var displayInline: Bool - var preferAdditionalInset: Bool +public class ChatMessageDateAndStatusNode: ASDisplayNode { + public struct TrailingReactionSettings { + public var displayInline: Bool + public var preferAdditionalInset: Bool - init(displayInline: Bool, preferAdditionalInset: Bool) { + public init(displayInline: Bool, preferAdditionalInset: Bool) { self.displayInline = displayInline self.preferAdditionalInset = preferAdditionalInset } } - struct StandaloneReactionSettings { - init() { + public struct StandaloneReactionSettings { + public init() { } } - enum LayoutInput { + public enum LayoutInput { case trailingContent(contentWidth: CGFloat, reactionSettings: TrailingReactionSettings?) case standalone(reactionSettings: StandaloneReactionSettings?) - var displayInlineReactions: Bool { + public var displayInlineReactions: Bool { switch self { case let .trailingContent(_, reactionSettings): if let reactionSettings = reactionSettings { @@ -214,7 +214,7 @@ class ChatMessageDateAndStatusNode: ASDisplayNode { } } - struct Arguments { + public struct Arguments { var context: AccountContext var presentationData: ChatPresentationData var edited: Bool @@ -234,7 +234,7 @@ class ChatMessageDateAndStatusNode: ASDisplayNode { var animationCache: AnimationCache var animationRenderer: MultiAnimationRenderer - init( + public init( context: AccountContext, presentationData: ChatPresentationData, edited: Bool, @@ -297,8 +297,8 @@ class ChatMessageDateAndStatusNode: ASDisplayNode { private var tapGestureRecognizer: UITapGestureRecognizer? - var openReplies: (() -> Void)? - var pressed: (() -> Void)? { + public var openReplies: (() -> Void)? + public var pressed: (() -> Void)? { didSet { if self.pressed != nil { if self.tapGestureRecognizer == nil { @@ -312,10 +312,10 @@ class ChatMessageDateAndStatusNode: ASDisplayNode { } } } - var reactionSelected: ((MessageReaction.Reaction) -> Void)? - var openReactionPreview: ((ContextGesture?, ContextExtractedContentContainingView, MessageReaction.Reaction) -> Void)? + public var reactionSelected: ((MessageReaction.Reaction) -> Void)? + public var openReactionPreview: ((ContextGesture?, ContextExtractedContentContainingView, MessageReaction.Reaction) -> Void)? - override init() { + override public init() { self.dateNode = TextNode() self.dateNode.isUserInteractionEnabled = false self.dateNode.displaysAsynchronously = false @@ -333,7 +333,7 @@ class ChatMessageDateAndStatusNode: ASDisplayNode { } } - func asyncLayout() -> (_ arguments: Arguments) -> (CGFloat, (CGFloat) -> (CGSize, (ListViewItemUpdateAnimation) -> Void)) { + public func asyncLayout() -> (_ arguments: Arguments) -> (CGFloat, (CGFloat) -> (CGSize, (ListViewItemUpdateAnimation) -> Void)) { let dateLayout = TextNode.asyncLayout(self.dateNode) var checkReadNode = self.checkReadNode @@ -1310,7 +1310,7 @@ class ChatMessageDateAndStatusNode: ASDisplayNode { } } - static func asyncLayout(_ node: ChatMessageDateAndStatusNode?) -> (_ arguments: Arguments) -> (CGFloat, (CGFloat) -> (CGSize, (ListViewItemUpdateAnimation) -> ChatMessageDateAndStatusNode)) { + public static func asyncLayout(_ node: ChatMessageDateAndStatusNode?) -> (_ arguments: Arguments) -> (CGFloat, (CGFloat) -> (CGSize, (ListViewItemUpdateAnimation) -> ChatMessageDateAndStatusNode)) { let currentLayout = node?.asyncLayout() return { arguments in let resultNode: ChatMessageDateAndStatusNode @@ -1334,7 +1334,7 @@ class ChatMessageDateAndStatusNode: ASDisplayNode { } } - func reactionView(value: MessageReaction.Reaction) -> UIView? { + public func reactionView(value: MessageReaction.Reaction) -> UIView? { for (id, node) in self.reactionNodes { if id == value { return node.iconView @@ -1348,7 +1348,7 @@ class ChatMessageDateAndStatusNode: ASDisplayNode { return nil } - override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? { + override public func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? { for (_, button) in self.reactionButtonsContainer.buttons { if button.view.frame.contains(point) { if let result = button.view.hitTest(self.view.convert(point, to: button.view), with: event) { @@ -1365,6 +1365,6 @@ class ChatMessageDateAndStatusNode: ASDisplayNode { } } -func shouldDisplayInlineDateReactions(message: Message, isPremium: Bool, forceInline: Bool) -> Bool { +public func shouldDisplayInlineDateReactions(message: Message, isPremium: Bool, forceInline: Bool) -> Bool { return forceInline } diff --git a/submodules/TelegramUI/Sources/ChatController.swift b/submodules/TelegramUI/Sources/ChatController.swift index 3c53d82926..80b1707722 100644 --- a/submodules/TelegramUI/Sources/ChatController.swift +++ b/submodules/TelegramUI/Sources/ChatController.swift @@ -102,6 +102,7 @@ import ChatContextQuery import PeerReportScreen import PeerSelectionController import SaveToCameraRoll +import ChatMessageDateAndStatusNode #if DEBUG import os.signpost diff --git a/submodules/TelegramUI/Sources/ChatMessageAnimatedStickerItemNode.swift b/submodules/TelegramUI/Sources/ChatMessageAnimatedStickerItemNode.swift index c9642ed116..95aec3811c 100644 --- a/submodules/TelegramUI/Sources/ChatMessageAnimatedStickerItemNode.swift +++ b/submodules/TelegramUI/Sources/ChatMessageAnimatedStickerItemNode.swift @@ -29,6 +29,7 @@ import ChatPresentationInterfaceState import TextNodeWithEntities import ChatControllerInteraction import ChatMessageForwardInfoNode +import ChatMessageDateAndStatusNode private let nameFont = Font.medium(14.0) private let inlineBotPrefixFont = Font.regular(14.0) diff --git a/submodules/TelegramUI/Sources/ChatMessageAttachedContentNode.swift b/submodules/TelegramUI/Sources/ChatMessageAttachedContentNode.swift index d2338430ee..d7ded66f62 100644 --- a/submodules/TelegramUI/Sources/ChatMessageAttachedContentNode.swift +++ b/submodules/TelegramUI/Sources/ChatMessageAttachedContentNode.swift @@ -19,6 +19,7 @@ import AnimationCache import MultiAnimationRenderer import ChatControllerInteraction import ShimmerEffect +import ChatMessageDateAndStatusNode private let buttonFont = Font.semibold(13.0) diff --git a/submodules/TelegramUI/Sources/ChatMessageBubbleItemNode.swift b/submodules/TelegramUI/Sources/ChatMessageBubbleItemNode.swift index 4ec3409468..4e31ca72ab 100644 --- a/submodules/TelegramUI/Sources/ChatMessageBubbleItemNode.swift +++ b/submodules/TelegramUI/Sources/ChatMessageBubbleItemNode.swift @@ -30,6 +30,7 @@ import ComponentFlow import EmojiStatusComponent import ChatControllerInteraction import ChatMessageForwardInfoNode +import ChatMessageDateAndStatusNode enum InternalBubbleTapAction { case action(() -> Void) diff --git a/submodules/TelegramUI/Sources/ChatMessageContactBubbleContentNode.swift b/submodules/TelegramUI/Sources/ChatMessageContactBubbleContentNode.swift index 15274b2d44..ea8b1169d6 100644 --- a/submodules/TelegramUI/Sources/ChatMessageContactBubbleContentNode.swift +++ b/submodules/TelegramUI/Sources/ChatMessageContactBubbleContentNode.swift @@ -9,6 +9,7 @@ import TelegramPresentationData import AvatarNode import AccountContext import PhoneNumberFormat +import ChatMessageDateAndStatusNode private let avatarFont = avatarPlaceholderFont(size: 16.0) diff --git a/submodules/TelegramUI/Sources/ChatMessageFileBubbleContentNode.swift b/submodules/TelegramUI/Sources/ChatMessageFileBubbleContentNode.swift index 39a9a6d089..407b1aa178 100644 --- a/submodules/TelegramUI/Sources/ChatMessageFileBubbleContentNode.swift +++ b/submodules/TelegramUI/Sources/ChatMessageFileBubbleContentNode.swift @@ -8,6 +8,7 @@ import TelegramCore import TelegramUIPreferences import ComponentFlow import AudioTranscriptionButtonComponent +import ChatMessageDateAndStatusNode class ChatMessageFileBubbleContentNode: ChatMessageBubbleContentNode { let interactiveFileNode: ChatMessageInteractiveFileNode diff --git a/submodules/TelegramUI/Sources/ChatMessageGiveawayBubbleContentNode.swift b/submodules/TelegramUI/Sources/ChatMessageGiveawayBubbleContentNode.swift index 666d752f30..ef2ec76850 100644 --- a/submodules/TelegramUI/Sources/ChatMessageGiveawayBubbleContentNode.swift +++ b/submodules/TelegramUI/Sources/ChatMessageGiveawayBubbleContentNode.swift @@ -14,6 +14,7 @@ import Markdown import ShimmerEffect import AnimatedStickerNode import TelegramAnimatedStickerNode +import ChatMessageDateAndStatusNode private let titleFont = Font.medium(15.0) private let textFont = Font.regular(13.0) diff --git a/submodules/TelegramUI/Sources/ChatMessageInstantVideoBubbleContentNode.swift b/submodules/TelegramUI/Sources/ChatMessageInstantVideoBubbleContentNode.swift index a236a18bac..88d95ae2bd 100644 --- a/submodules/TelegramUI/Sources/ChatMessageInstantVideoBubbleContentNode.swift +++ b/submodules/TelegramUI/Sources/ChatMessageInstantVideoBubbleContentNode.swift @@ -8,6 +8,7 @@ import TelegramCore import TelegramUIPreferences import ComponentFlow import AudioTranscriptionButtonComponent +import ChatMessageDateAndStatusNode class ChatMessageInstantVideoBubbleContentNode: ChatMessageBubbleContentNode { let interactiveFileNode: ChatMessageInteractiveFileNode diff --git a/submodules/TelegramUI/Sources/ChatMessageInstantVideoItemNode.swift b/submodules/TelegramUI/Sources/ChatMessageInstantVideoItemNode.swift index 059a73035c..0684c3047f 100644 --- a/submodules/TelegramUI/Sources/ChatMessageInstantVideoItemNode.swift +++ b/submodules/TelegramUI/Sources/ChatMessageInstantVideoItemNode.swift @@ -14,6 +14,7 @@ import ContextUI import Markdown import ChatControllerInteraction import ChatMessageForwardInfoNode +import ChatMessageDateAndStatusNode private let nameFont = Font.medium(14.0) diff --git a/submodules/TelegramUI/Sources/ChatMessageInteractiveFileNode.swift b/submodules/TelegramUI/Sources/ChatMessageInteractiveFileNode.swift index a7c93266b8..74f5fd4387 100644 --- a/submodules/TelegramUI/Sources/ChatMessageInteractiveFileNode.swift +++ b/submodules/TelegramUI/Sources/ChatMessageInteractiveFileNode.swift @@ -29,6 +29,7 @@ import AudioTranscriptionPendingIndicatorComponent import UndoUI import TelegramNotices import ChatControllerInteraction +import ChatMessageDateAndStatusNode private struct FetchControls { let fetch: (Bool) -> Void diff --git a/submodules/TelegramUI/Sources/ChatMessageInteractiveInstantVideoNode.swift b/submodules/TelegramUI/Sources/ChatMessageInteractiveInstantVideoNode.swift index ab55076e46..096e3dba7f 100644 --- a/submodules/TelegramUI/Sources/ChatMessageInteractiveInstantVideoNode.swift +++ b/submodules/TelegramUI/Sources/ChatMessageInteractiveInstantVideoNode.swift @@ -20,6 +20,7 @@ import TelegramNotices import Markdown import TextFormat import ChatMessageForwardInfoNode +import ChatMessageDateAndStatusNode struct ChatMessageInstantVideoItemLayoutResult { let contentSize: CGSize diff --git a/submodules/TelegramUI/Sources/ChatMessageInteractiveMediaNode.swift b/submodules/TelegramUI/Sources/ChatMessageInteractiveMediaNode.swift index 1c42d3c5cd..4c93c75c15 100644 --- a/submodules/TelegramUI/Sources/ChatMessageInteractiveMediaNode.swift +++ b/submodules/TelegramUI/Sources/ChatMessageInteractiveMediaNode.swift @@ -25,6 +25,7 @@ import ContextUI import InvisibleInkDustNode import ChatControllerInteraction import StoryContainerScreen +import ChatMessageDateAndStatusNode private struct FetchControls { let fetch: (Bool) -> Void diff --git a/submodules/TelegramUI/Sources/ChatMessageMapBubbleContentNode.swift b/submodules/TelegramUI/Sources/ChatMessageMapBubbleContentNode.swift index 167cbb4a05..76185c5610 100644 --- a/submodules/TelegramUI/Sources/ChatMessageMapBubbleContentNode.swift +++ b/submodules/TelegramUI/Sources/ChatMessageMapBubbleContentNode.swift @@ -10,6 +10,7 @@ import PhotoResources import MediaResources import LocationResources import LiveLocationPositionNode +import ChatMessageDateAndStatusNode private let titleFont = Font.medium(14.0) private let liveTitleFont = Font.medium(16.0) diff --git a/submodules/TelegramUI/Sources/ChatMessageMediaBubbleContentNode.swift b/submodules/TelegramUI/Sources/ChatMessageMediaBubbleContentNode.swift index 39931215e8..1b704f5761 100644 --- a/submodules/TelegramUI/Sources/ChatMessageMediaBubbleContentNode.swift +++ b/submodules/TelegramUI/Sources/ChatMessageMediaBubbleContentNode.swift @@ -10,6 +10,7 @@ import TelegramPresentationData import AccountContext import GridMessageSelectionNode import ChatControllerInteraction +import ChatMessageDateAndStatusNode class ChatMessageMediaBubbleContentNode: ChatMessageBubbleContentNode { override var supportsMosaic: Bool { diff --git a/submodules/TelegramUI/Sources/ChatMessagePollBubbleContentNode.swift b/submodules/TelegramUI/Sources/ChatMessagePollBubbleContentNode.swift index 1ebd825c24..1edcb44808 100644 --- a/submodules/TelegramUI/Sources/ChatMessagePollBubbleContentNode.swift +++ b/submodules/TelegramUI/Sources/ChatMessagePollBubbleContentNode.swift @@ -11,6 +11,7 @@ import AccountContext import AvatarNode import TelegramPresentationData import ChatMessageBackground +import ChatMessageDateAndStatusNode func isPollEffectivelyClosed(message: Message, poll: TelegramMediaPoll) -> Bool { if poll.isClosed { diff --git a/submodules/TelegramUI/Sources/ChatMessageRestrictedBubbleContentNode.swift b/submodules/TelegramUI/Sources/ChatMessageRestrictedBubbleContentNode.swift index 437d1b8a93..e53e506c66 100644 --- a/submodules/TelegramUI/Sources/ChatMessageRestrictedBubbleContentNode.swift +++ b/submodules/TelegramUI/Sources/ChatMessageRestrictedBubbleContentNode.swift @@ -7,6 +7,7 @@ import SwiftSignalKit import TelegramCore import TelegramPresentationData import TextFormat +import ChatMessageDateAndStatusNode class ChatMessageRestrictedBubbleContentNode: ChatMessageBubbleContentNode { private let textNode: TextNode diff --git a/submodules/TelegramUI/Sources/ChatMessageStickerItemNode.swift b/submodules/TelegramUI/Sources/ChatMessageStickerItemNode.swift index cad1b62e95..728466ecb6 100644 --- a/submodules/TelegramUI/Sources/ChatMessageStickerItemNode.swift +++ b/submodules/TelegramUI/Sources/ChatMessageStickerItemNode.swift @@ -15,6 +15,7 @@ import ShimmerEffect import WallpaperBackgroundNode import ChatControllerInteraction import ChatMessageForwardInfoNode +import ChatMessageDateAndStatusNode private let nameFont = Font.medium(14.0) private let inlineBotPrefixFont = Font.regular(14.0) diff --git a/submodules/TelegramUI/Sources/ChatMessageTextBubbleContentNode.swift b/submodules/TelegramUI/Sources/ChatMessageTextBubbleContentNode.swift index f567ed93fe..e1065637b0 100644 --- a/submodules/TelegramUI/Sources/ChatMessageTextBubbleContentNode.swift +++ b/submodules/TelegramUI/Sources/ChatMessageTextBubbleContentNode.swift @@ -20,6 +20,7 @@ import LottieAnimationCache import MultiAnimationRenderer import EmojiTextAttachmentView import TextNodeWithEntities +import ChatMessageDateAndStatusNode private final class CachedChatMessageText { let text: String