Render and play InstantPageBlock.audio in the InstantPage V2 renderer
(rich-data message bubbles + the rich send preview), where audio was
previously an inert grey placeholder.
- New InstantPageV2AudioContentNode replicates the standard music message
bubble (ChatMessageInteractiveFileNode's music layout): a SemanticStatusNode
control (album art via playerAlbumArt + play/pause) with a download/progress
overlay, title + "duration · performer" lines, exact fonts/colors from
theme.chat.message.{incoming|outgoing}. Tap is driven by a
UITapGestureRecognizer (ASControl .touchUpInside is cancelled by the chat
ListView's gesture system). V1's InstantPageAudioNode is unchanged.
- Playback runs on InstantPageMediaPlaylist with a discriminated, message-scoped
InstantPageMediaPlaylistId (.instantPage / .richMessage) so concurrent
rich-message audio bubbles don't collide; the big control's play/pause comes
from filteredPlaylistState, the overlay's download/progress from
messageMediaFileStatus, and fetch goes through the fetch manager.
- Rich-message audio fetches via a MessageReference (threaded through the V2
render context) instead of the synthesized webpage; FetchedMediaResource's
.message revalidation arm now also searches RichTextMessageAttribute instant
pages, so a stale instant-page audio/image reference can recover. Corrected a
dormant inverted InstantPagePlaylistLocation.isEqual.
- New .mediaAudio laid-out item + layout/reveal-cost arms; the audio block lays
out full-width at the file node's music normHeight.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
46 lines
1.9 KiB
Text
46 lines
1.9 KiB
Text
load("@build_bazel_rules_swift//swift:swift.bzl", "swift_library")
|
|
|
|
swift_library(
|
|
name = "InstantPageUI",
|
|
module_name = "InstantPageUI",
|
|
srcs = glob([
|
|
"Sources/**/*.swift",
|
|
]),
|
|
copts = [
|
|
"-warnings-as-errors",
|
|
],
|
|
deps = [
|
|
"//submodules/SSignalKit/SwiftSignalKit:SwiftSignalKit",
|
|
"//submodules/AsyncDisplayKit:AsyncDisplayKit",
|
|
"//submodules/CheckNode:CheckNode",
|
|
"//submodules/Display:Display",
|
|
"//submodules/Postbox:Postbox",
|
|
"//submodules/TelegramCore:TelegramCore",
|
|
"//submodules/TelegramPresentationData:TelegramPresentationData",
|
|
"//submodules/TelegramUIPreferences:TelegramUIPreferences",
|
|
"//submodules/TextFormat:TextFormat",
|
|
"//submodules/InvisibleInkDustNode:InvisibleInkDustNode",
|
|
"//submodules/TelegramUI/Components/EmojiTextAttachmentView:EmojiTextAttachmentView",
|
|
"//submodules/TelegramUI/Components/AnimationCache:AnimationCache",
|
|
"//submodules/TelegramUI/Components/MultiAnimationRenderer:MultiAnimationRenderer",
|
|
"//submodules/GalleryUI:GalleryUI",
|
|
"//submodules/MusicAlbumArtResources:MusicAlbumArtResources",
|
|
"//submodules/SemanticStatusNode:SemanticStatusNode",
|
|
"//submodules/LiveLocationPositionNode:LiveLocationPositionNode",
|
|
"//submodules/MosaicLayout:MosaicLayout",
|
|
"//submodules/LocationUI:LocationUI",
|
|
"//submodules/AppBundle:AppBundle",
|
|
"//submodules/LocationResources:LocationResources",
|
|
"//submodules/UndoUI:UndoUI",
|
|
"//submodules/TranslateUI:TranslateUI",
|
|
"//submodules/TelegramUI/Components/TextProcessingScreen",
|
|
"//submodules/Pasteboard",
|
|
"//submodules/Tuples:Tuples",
|
|
"//third-party/SwiftMath:SwiftMath",
|
|
"//submodules/ComponentFlow:ComponentFlow",
|
|
"//submodules/TelegramUI/Components/ShimmeringMask:ShimmeringMask",
|
|
],
|
|
visibility = [
|
|
"//visibility:public",
|
|
],
|
|
)
|