about summary refs log tree commit diff
diff options
context:
space:
mode:
authorSamuel Newman <mozzius@protonmail.com>2025-03-06 19:49:51 +0000
committerGitHub <noreply@github.com>2025-03-06 11:49:51 -0800
commit153fc17676cf9301e0f066e3c280da83821a6a63 (patch)
tree732c6805267ff87d5c656af59cfeaf7956af5634
parent8eb1f8f1fc0d80635ac2f78d87adc73a3862ca3f (diff)
downloadvoidsky-153fc17676cf9301e0f066e3c280da83821a6a63.tar.zst
tweak ci (#7916)
-rw-r--r--src/lib/constants.ts3
-rw-r--r--src/lib/media/video/compress.web.ts5
-rw-r--r--src/view/com/composer/videos/SelectVideoBtn.tsx16
-rw-r--r--src/view/com/composer/videos/pickVideo.ts6
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,
   })
 }