diff options
author | Samuel Newman <mozzius@protonmail.com> | 2025-03-06 19:49:51 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-03-06 11:49:51 -0800 |
commit | 153fc17676cf9301e0f066e3c280da83821a6a63 (patch) | |
tree | 732c6805267ff87d5c656af59cfeaf7956af5634 /src | |
parent | 8eb1f8f1fc0d80635ac2f78d87adc73a3862ca3f (diff) | |
download | voidsky-153fc17676cf9301e0f066e3c280da83821a6a63.tar.zst |
tweak ci (#7916)
Diffstat (limited to 'src')
-rw-r--r-- | src/lib/constants.ts | 3 | ||||
-rw-r--r-- | src/lib/media/video/compress.web.ts | 5 | ||||
-rw-r--r-- | src/view/com/composer/videos/SelectVideoBtn.tsx | 16 | ||||
-rw-r--r-- | src/view/com/composer/videos/pickVideo.ts | 6 |
4 files changed, 18 insertions, 12 deletions
diff --git a/src/lib/constants.ts b/src/lib/constants.ts index c03439f56..d2f585256 100644 --- a/src/lib/constants.ts +++ b/src/lib/constants.ts @@ -168,6 +168,9 @@ export const MAX_LABELERS = 20 export const VIDEO_SERVICE = 'https://video.bsky.app' export const VIDEO_SERVICE_DID = 'did:web:video.bsky.app' +export const VIDEO_MAX_DURATION_MS = 3 * 60 * 1000 // 3 minutes in milliseconds +export const VIDEO_MAX_SIZE = 1000 * 1000 * 100 // 100mb + export const SUPPORTED_MIME_TYPES = [ 'video/mp4', 'video/mpeg', diff --git a/src/lib/media/video/compress.web.ts b/src/lib/media/video/compress.web.ts index c64a147c5..995fbf1da 100644 --- a/src/lib/media/video/compress.web.ts +++ b/src/lib/media/video/compress.web.ts @@ -1,10 +1,9 @@ import {ImagePickerAsset} from 'expo-image-picker' +import {VIDEO_MAX_SIZE} from '#/lib/constants' import {VideoTooLargeError} from '#/lib/media/video/errors' import {CompressedVideo} from './types' -const MAX_VIDEO_SIZE = 1000 * 1000 * 50 // 50mb - // doesn't actually compress, converts to ArrayBuffer export async function compressVideo( asset: ImagePickerAsset, @@ -17,7 +16,7 @@ export async function compressVideo( const blob = base64ToBlob(base64, mimeType) const uri = URL.createObjectURL(blob) - if (blob.size > MAX_VIDEO_SIZE) { + if (blob.size > VIDEO_MAX_SIZE) { throw new VideoTooLargeError() } diff --git a/src/view/com/composer/videos/SelectVideoBtn.tsx b/src/view/com/composer/videos/SelectVideoBtn.tsx index 1b052ccdd..8d9371f0d 100644 --- a/src/view/com/composer/videos/SelectVideoBtn.tsx +++ b/src/view/com/composer/videos/SelectVideoBtn.tsx @@ -4,7 +4,11 @@ import {ImagePickerAsset} from 'expo-image-picker' import {msg} from '@lingui/macro' import {useLingui} from '@lingui/react' -import {SUPPORTED_MIME_TYPES, SupportedMimeTypes} from '#/lib/constants' +import { + SUPPORTED_MIME_TYPES, + SupportedMimeTypes, + VIDEO_MAX_DURATION_MS, +} from '#/lib/constants' import {BSKY_SERVICE} from '#/lib/constants' import {useVideoLibraryPermission} from '#/lib/hooks/usePermissions' import {getHostnameFromUrl} from '#/lib/strings/url-helpers' @@ -19,8 +23,6 @@ import {VideoClip_Stroke2_Corner0_Rounded as VideoClipIcon} from '#/components/i import * as Prompt from '#/components/Prompt' import {pickVideo} from './pickVideo' -const VIDEO_MAX_DURATION = 60 * 1000 // 60s in milliseconds - type Props = { onSelectVideo: (video: ImagePickerAsset) => void disabled?: boolean @@ -54,8 +56,8 @@ export function SelectVideoBtn({onSelectVideo, disabled, setError}: Props) { try { if (isWeb) { // asset.duration is null for gifs (see the TODO in pickVideo.web.ts) - if (asset.duration && asset.duration > VIDEO_MAX_DURATION) { - throw Error(_(msg`Videos must be less than 60 seconds long`)) + if (asset.duration && asset.duration > VIDEO_MAX_DURATION_MS) { + throw Error(_(msg`Videos must be less than 3 minutes long`)) } // compression step on native converts to mp4, so no need to check there if ( @@ -69,8 +71,8 @@ export function SelectVideoBtn({onSelectVideo, disabled, setError}: Props) { if (typeof asset.duration !== 'number') { throw Error('Asset is not a video') } - if (asset.duration > VIDEO_MAX_DURATION) { - throw Error(_(msg`Videos must be less than 60 seconds long`)) + if (asset.duration > VIDEO_MAX_DURATION_MS) { + throw Error(_(msg`Videos must be less than 3 minutes long`)) } } onSelectVideo(asset) diff --git a/src/view/com/composer/videos/pickVideo.ts b/src/view/com/composer/videos/pickVideo.ts index 0edf7d0de..13bb96805 100644 --- a/src/view/com/composer/videos/pickVideo.ts +++ b/src/view/com/composer/videos/pickVideo.ts @@ -1,18 +1,20 @@ import { ImagePickerAsset, launchImageLibraryAsync, - MediaTypeOptions, UIImagePickerPreferredAssetRepresentationMode, } from 'expo-image-picker' +import {VIDEO_MAX_DURATION_MS} from '#/lib/constants' + export async function pickVideo() { return await launchImageLibraryAsync({ exif: false, - mediaTypes: MediaTypeOptions.Videos, + mediaTypes: ['videos'], quality: 1, legacy: true, preferredAssetRepresentationMode: UIImagePickerPreferredAssetRepresentationMode.Current, + videoMaxDuration: VIDEO_MAX_DURATION_MS / 1000, }) } |