[Video] Captions and alt text (#5009)

* video settings modal in composer

* show done button on web

* rm download options

* fix logic for showing settings button

* add language picker (wip)

* subtitle list with language select

* send captions & alt text with video when posting

* style "ensure you have selected a language" text

* include aspect ratio with video

* filter out captions where the lang is not set

* rm log

* fix label and add hint

* minor scrubber fix
This commit is contained in:
Samuel Newman 2024-08-30 18:45:49 +01:00 committed by GitHub
parent e7954e590b
commit c70ec1ce1a
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
14 changed files with 503 additions and 30 deletions

View file

@ -1,27 +1,65 @@
import React from 'react'
import React, {useEffect, useRef} from 'react'
import {View} from 'react-native'
import {ImagePickerAsset} from 'expo-image-picker'
import {CompressedVideo} from '#/lib/media/video/compress'
import {ExternalEmbedRemoveBtn} from 'view/com/composer/ExternalEmbedRemoveBtn'
import {atoms as a} from '#/alf'
import {atoms as a, useTheme} from '#/alf'
export function VideoPreview({
asset,
video,
setDimensions,
clear,
}: {
asset: ImagePickerAsset
video: CompressedVideo
setDimensions: (width: number, height: number) => void
clear: () => void
}) {
const t = useTheme()
const ref = useRef<HTMLVideoElement>(null)
useEffect(() => {
if (!ref.current) return
const abortController = new AbortController()
const {signal} = abortController
ref.current.addEventListener(
'loadedmetadata',
function () {
setDimensions(this.videoWidth, this.videoHeight)
},
{signal},
)
return () => {
abortController.abort()
}
}, [setDimensions])
const aspectRatio = asset.width / asset.height
return (
<View
style={[
a.w_full,
a.rounded_sm,
{aspectRatio: 16 / 9},
{aspectRatio: isNaN(aspectRatio) ? 16 / 9 : aspectRatio},
a.overflow_hidden,
{backgroundColor: t.palette.black},
]}>
<ExternalEmbedRemoveBtn onRemove={clear} />
<video src={video.uri} style={a.flex_1} autoPlay loop muted playsInline />
<video
ref={ref}
src={video.uri}
style={a.flex_1}
autoPlay
loop
muted
playsInline
/>
</View>
)
}