diff options
author | Frudrax Cheng <i@cynosura.one> | 2024-06-19 14:41:03 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-06-19 14:41:03 +0800 |
commit | bdc1ea897fa4e1a2bb0fbd405564e98aca36f973 (patch) | |
tree | a412067a09e0c34d7d83496842ebd0e0e57f4b9d /src/view/com/notifications/FeedItem.tsx | |
parent | a6d49062e6d50b7c9a6c0d50c38fcfeb8f63e46f (diff) | |
parent | 8788708bd229ee8a7049285b2e520cc657b41c00 (diff) | |
download | voidsky-bdc1ea897fa4e1a2bb0fbd405564e98aca36f973.tar.zst |
Merge branch 'bluesky-social:main' into zh
Diffstat (limited to 'src/view/com/notifications/FeedItem.tsx')
-rw-r--r-- | src/view/com/notifications/FeedItem.tsx | 47 |
1 files changed, 40 insertions, 7 deletions
diff --git a/src/view/com/notifications/FeedItem.tsx b/src/view/com/notifications/FeedItem.tsx index d6c38ea61..9cd7a2917 100644 --- a/src/view/com/notifications/FeedItem.tsx +++ b/src/view/com/notifications/FeedItem.tsx @@ -8,6 +8,7 @@ import { } from 'react-native' import { AppBskyActorDefs, + AppBskyEmbedExternal, AppBskyEmbedImages, AppBskyEmbedRecordWithMedia, AppBskyFeedDefs, @@ -51,6 +52,7 @@ import {TimeElapsed} from '../util/TimeElapsed' import {PreviewableUserAvatar, UserAvatar} from '../util/UserAvatar' import hairlineWidth = StyleSheet.hairlineWidth +import {parseTenorGif} from '#/lib/strings/embed-player' const MAX_AUTHORS = 5 @@ -465,17 +467,48 @@ function AdditionalPostText({post}: {post?: AppBskyFeedDefs.PostView}) { const pal = usePalette('default') if (post && AppBskyFeedPost.isRecord(post?.record)) { const text = post.record.text - const images = AppBskyEmbedImages.isView(post.embed) - ? post.embed.images - : AppBskyEmbedRecordWithMedia.isView(post.embed) && - AppBskyEmbedImages.isView(post.embed.media) - ? post.embed.media.images - : undefined + let images + let isGif = false + + if (AppBskyEmbedImages.isView(post.embed)) { + images = post.embed.images + } else if ( + AppBskyEmbedRecordWithMedia.isView(post.embed) && + AppBskyEmbedImages.isView(post.embed.media) + ) { + images = post.embed.media.images + } else if ( + AppBskyEmbedExternal.isView(post.embed) && + post.embed.external.thumb + ) { + let url: URL | undefined + try { + url = new URL(post.embed.external.uri) + } catch {} + if (url) { + const {success} = parseTenorGif(url) + if (success) { + isGif = true + images = [ + { + thumb: post.embed.external.thumb, + alt: post.embed.external.title, + fullsize: post.embed.external.thumb, + }, + ] + } + } + } + return ( <> {text?.length > 0 && <Text style={pal.textLight}>{text}</Text>} {images && images.length > 0 && ( - <ImageHorzList images={images} style={styles.additionalPostImages} /> + <ImageHorzList + images={images} + style={styles.additionalPostImages} + gif={isGif} + /> )} </> ) |