diff options
author | Hailey <me@haileyok.com> | 2024-04-19 15:31:20 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-04-19 23:31:20 +0100 |
commit | c0ca891501cbc60eb945e3235800ec1e29a15ccd (patch) | |
tree | ac4693b0ca9e20c7b21faee626f7b9ac2a4d15e5 /src | |
parent | 22e86c99033a55881bf02a3129b653a13bac619e (diff) | |
download | voidsky-c0ca891501cbc60eb945e3235800ec1e29a15ccd.tar.zst |
Player improvement pre-reqs (#3618)
* add dims to type * save * add the dimensions to the embed info * add a new case * add a new case * limit this case to giphy * use gate * flip mp4/webp * fix tests * add new test
Diffstat (limited to 'src')
-rw-r--r-- | src/lib/statsig/gates.ts | 1 | ||||
-rw-r--r-- | src/lib/strings/embed-player.ts | 28 | ||||
-rw-r--r-- | src/view/com/util/post-embeds/ExternalLinkEmbed.tsx | 47 |
3 files changed, 53 insertions, 23 deletions
diff --git a/src/lib/statsig/gates.ts b/src/lib/statsig/gates.ts index 301746fb2..e42e9efe1 100644 --- a/src/lib/statsig/gates.ts +++ b/src/lib/statsig/gates.ts @@ -4,6 +4,7 @@ export type Gate = | 'disable_min_shell_on_foregrounding_v2' | 'disable_poll_on_discover_v2' | 'hide_vertical_scroll_indicators' + | 'new_gif_player' | 'new_profile_scroll_component' | 'receive_updates' | 'show_follow_back_label_v2' diff --git a/src/lib/strings/embed-player.ts b/src/lib/strings/embed-player.ts index ee7328478..bbc58a206 100644 --- a/src/lib/strings/embed-player.ts +++ b/src/lib/strings/embed-player.ts @@ -1,4 +1,5 @@ import {Dimensions} from 'react-native' + import {isWeb} from 'platform/detection' const {height: SCREEN_HEIGHT} = Dimensions.get('window') @@ -60,6 +61,10 @@ export interface EmbedPlayerParams { source: EmbedPlayerSource metaUri?: string hideDetails?: boolean + dimensions?: { + height: number + width: number + } } const giphyRegex = /media(?:[0-4]\.giphy\.com|\.giphy\.com)/i @@ -250,6 +255,16 @@ export function parseEmbedPlayerFromUrl( if (urlp.hostname === 'giphy.com' || urlp.hostname === 'www.giphy.com') { const [_, gifs, nameAndId] = urlp.pathname.split('/') + const h = urlp.searchParams.get('hh') + const w = urlp.searchParams.get('ww') + let dimensions + if (h && w) { + dimensions = { + height: Number(h), + width: Number(w), + } + } + /* * nameAndId is a string that consists of the name (dash separated) and the id of the gif (the last part of the name) * We want to get the id of the gif, then direct to media.giphy.com/media/{id}/giphy.webp so we can @@ -266,7 +281,10 @@ export function parseEmbedPlayerFromUrl( isGif: true, hideDetails: true, metaUri: `https://giphy.com/gifs/${gifId}`, - playerUri: `https://i.giphy.com/media/${gifId}/giphy.webp`, + playerUri: `https://i.giphy.com/media/${gifId}/${ + dimensions ? '200.mp4' : '200.webp' + }`, + dimensions, } } } @@ -287,7 +305,7 @@ export function parseEmbedPlayerFromUrl( isGif: true, hideDetails: true, metaUri: `https://giphy.com/gifs/${trackingOrId}`, - playerUri: `https://i.giphy.com/media/${trackingOrId}/giphy.webp`, + playerUri: `https://i.giphy.com/media/${trackingOrId}/200.webp`, } } else if (filename && gifFilenameRegex.test(filename)) { return { @@ -296,7 +314,7 @@ export function parseEmbedPlayerFromUrl( isGif: true, hideDetails: true, metaUri: `https://giphy.com/gifs/${idOrFilename}`, - playerUri: `https://i.giphy.com/media/${idOrFilename}/giphy.webp`, + playerUri: `https://i.giphy.com/media/${idOrFilename}/200.webp`, } } } @@ -315,7 +333,7 @@ export function parseEmbedPlayerFromUrl( isGif: true, hideDetails: true, metaUri: `https://giphy.com/gifs/${gifId}`, - playerUri: `https://i.giphy.com/media/${gifId}/giphy.webp`, + playerUri: `https://i.giphy.com/media/${gifId}/200.webp`, } } else if (mediaOrFilename) { const gifId = mediaOrFilename.split('.')[0] @@ -327,7 +345,7 @@ export function parseEmbedPlayerFromUrl( metaUri: `https://giphy.com/gifs/${gifId}`, playerUri: `https://i.giphy.com/media/${ mediaOrFilename.split('.')[0] - }/giphy.webp`, + }/200.webp`, } } } diff --git a/src/view/com/util/post-embeds/ExternalLinkEmbed.tsx b/src/view/com/util/post-embeds/ExternalLinkEmbed.tsx index aaa98a41f..ff7c643f6 100644 --- a/src/view/com/util/post-embeds/ExternalLinkEmbed.tsx +++ b/src/view/com/util/post-embeds/ExternalLinkEmbed.tsx @@ -1,15 +1,17 @@ import React from 'react' -import {Image} from 'expo-image' -import {Text} from '../text/Text' import {StyleSheet, View} from 'react-native' +import {Image} from 'expo-image' +import {AppBskyEmbedExternal} from '@atproto/api' + import {usePalette} from 'lib/hooks/usePalette' import {useWebMediaQueries} from 'lib/hooks/useWebMediaQueries' -import {AppBskyEmbedExternal} from '@atproto/api' -import {toNiceDomain} from 'lib/strings/url-helpers' +import {useGate} from 'lib/statsig/statsig' import {parseEmbedPlayerFromUrl} from 'lib/strings/embed-player' -import {ExternalPlayer} from 'view/com/util/post-embeds/ExternalPlayerEmbed' -import {ExternalGifEmbed} from 'view/com/util/post-embeds/ExternalGifEmbed' +import {toNiceDomain} from 'lib/strings/url-helpers' import {useExternalEmbedsPrefs} from 'state/preferences' +import {ExternalGifEmbed} from 'view/com/util/post-embeds/ExternalGifEmbed' +import {ExternalPlayer} from 'view/com/util/post-embeds/ExternalPlayerEmbed' +import {Text} from '../text/Text' export const ExternalLinkEmbed = ({ link, @@ -19,6 +21,7 @@ export const ExternalLinkEmbed = ({ const pal = usePalette('default') const {isMobile} = useWebMediaQueries() const externalEmbedPrefs = useExternalEmbedsPrefs() + const gate = useGate() const embedPlayerParams = React.useMemo(() => { const params = parseEmbedPlayerFromUrl(link.uri) @@ -27,6 +30,10 @@ export const ExternalLinkEmbed = ({ return params } }, [link.uri, externalEmbedPrefs]) + const isCompatibleGiphy = + embedPlayerParams?.source === 'giphy' && + embedPlayerParams.dimensions && + gate('new_gif_player') return ( <View style={styles.container}> @@ -37,20 +44,24 @@ export const ExternalLinkEmbed = ({ accessibilityIgnoresInvertColors /> ) : undefined} - {(embedPlayerParams?.isGif && ( + {isCompatibleGiphy ? ( + <View /> + ) : embedPlayerParams?.isGif ? ( <ExternalGifEmbed link={link} params={embedPlayerParams} /> - )) || - (embedPlayerParams && ( - <ExternalPlayer link={link} params={embedPlayerParams} /> - ))} + ) : embedPlayerParams ? ( + <ExternalPlayer link={link} params={embedPlayerParams} /> + ) : undefined} <View style={[styles.info, {paddingHorizontal: isMobile ? 10 : 14}]}> - <Text - type="sm" - numberOfLines={1} - style={[pal.textLight, styles.extUri]}> - {toNiceDomain(link.uri)} - </Text> - {!embedPlayerParams?.isGif && ( + {!isCompatibleGiphy && ( + <Text + type="sm" + numberOfLines={1} + style={[pal.textLight, styles.extUri]}> + {toNiceDomain(link.uri)} + </Text> + )} + + {!embedPlayerParams?.isGif && !embedPlayerParams?.dimensions && ( <Text type="lg-bold" numberOfLines={3} style={[pal.text]}> {link.title || link.uri} </Text> |