diff options
author | Samuel Newman <mozzius@protonmail.com> | 2024-06-19 01:09:06 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-06-19 03:09:06 +0300 |
commit | 3dc34be9291fe76ed0a46266f67304df52c72875 (patch) | |
tree | 8adf597cd40cb6b19511ce4b4aa7eb7ff4a85b18 /src/view/com/notifications | |
parent | 7ddbc392c38393db922e47c0a7f56f6855de8152 (diff) | |
download | voidsky-3dc34be9291fe76ed0a46266f67304df52c72875.tar.zst |
GIF previews in notifications (#4447)
* gifs in notifications * remove try/catch * Limit try/catch scope --------- Co-authored-by: Dan Abramov <dan.abramov@gmail.com>
Diffstat (limited to 'src/view/com/notifications')
-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} + /> )} </> ) |