[Video] Cap duration (#5270)
parent
a19c91d90e
commit
24b07c6cf4
|
@ -18,7 +18,7 @@ import {Button} from '#/components/Button'
|
||||||
import {VideoClip_Stroke2_Corner0_Rounded as VideoClipIcon} from '#/components/icons/VideoClip'
|
import {VideoClip_Stroke2_Corner0_Rounded as VideoClipIcon} from '#/components/icons/VideoClip'
|
||||||
import * as Prompt from '#/components/Prompt'
|
import * as Prompt from '#/components/Prompt'
|
||||||
|
|
||||||
const VIDEO_MAX_DURATION = 60
|
const VIDEO_MAX_DURATION = 60 * 1000 // 60s in milliseconds
|
||||||
|
|
||||||
type Props = {
|
type Props = {
|
||||||
onSelectVideo: (video: ImagePickerAsset) => void
|
onSelectVideo: (video: ImagePickerAsset) => void
|
||||||
|
@ -45,13 +45,20 @@ export function SelectVideoBtn({onSelectVideo, disabled, setError}: Props) {
|
||||||
const response = await launchImageLibraryAsync({
|
const response = await launchImageLibraryAsync({
|
||||||
exif: false,
|
exif: false,
|
||||||
mediaTypes: MediaTypeOptions.Videos,
|
mediaTypes: MediaTypeOptions.Videos,
|
||||||
videoMaxDuration: VIDEO_MAX_DURATION,
|
|
||||||
quality: 1,
|
quality: 1,
|
||||||
legacy: true,
|
legacy: true,
|
||||||
preferredAssetRepresentationMode:
|
preferredAssetRepresentationMode:
|
||||||
UIImagePickerPreferredAssetRepresentationMode.Current,
|
UIImagePickerPreferredAssetRepresentationMode.Current,
|
||||||
})
|
})
|
||||||
if (response.assets && response.assets.length > 0) {
|
if (response.assets && response.assets.length > 0) {
|
||||||
|
if (isNative) {
|
||||||
|
if (typeof response.assets[0].duration !== 'number')
|
||||||
|
throw Error('Asset is not a video')
|
||||||
|
if (response.assets[0].duration > VIDEO_MAX_DURATION) {
|
||||||
|
setError(_(msg`Videos must be less than 60 seconds long`))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
try {
|
try {
|
||||||
onSelectVideo(response.assets[0])
|
onSelectVideo(response.assets[0])
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
|
|
|
@ -12,6 +12,8 @@ import {ExternalEmbedRemoveBtn} from 'view/com/composer/ExternalEmbedRemoveBtn'
|
||||||
import {atoms as a} from '#/alf'
|
import {atoms as a} from '#/alf'
|
||||||
import {PlayButtonIcon} from '#/components/video/PlayButtonIcon'
|
import {PlayButtonIcon} from '#/components/video/PlayButtonIcon'
|
||||||
|
|
||||||
|
const MAX_DURATION = 60
|
||||||
|
|
||||||
export function VideoPreview({
|
export function VideoPreview({
|
||||||
asset,
|
asset,
|
||||||
video,
|
video,
|
||||||
|
@ -36,6 +38,15 @@ export function VideoPreview({
|
||||||
'loadedmetadata',
|
'loadedmetadata',
|
||||||
function () {
|
function () {
|
||||||
setDimensions(this.videoWidth, this.videoHeight)
|
setDimensions(this.videoWidth, this.videoHeight)
|
||||||
|
if (!isNaN(this.duration)) {
|
||||||
|
if (this.duration > MAX_DURATION) {
|
||||||
|
Toast.show(
|
||||||
|
_(msg`Videos must be less than 60 seconds long`),
|
||||||
|
'xmark',
|
||||||
|
)
|
||||||
|
clear()
|
||||||
|
}
|
||||||
|
}
|
||||||
},
|
},
|
||||||
{signal},
|
{signal},
|
||||||
)
|
)
|
||||||
|
|
Loading…
Reference in New Issue