about summary refs log tree commit diff
path: root/src/lib/media/picker.shared.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/media/picker.shared.ts')
-rw-r--r--src/lib/media/picker.shared.ts24
1 files changed, 24 insertions, 0 deletions
diff --git a/src/lib/media/picker.shared.ts b/src/lib/media/picker.shared.ts
index 8ec1154c8..fc89cad33 100644
--- a/src/lib/media/picker.shared.ts
+++ b/src/lib/media/picker.shared.ts
@@ -1,11 +1,14 @@
 import {
   type ImagePickerOptions,
   launchImageLibraryAsync,
+  UIImagePickerPreferredAssetRepresentationMode,
 } from 'expo-image-picker'
 import {t} from '@lingui/macro'
 
+import {isIOS, isWeb} from '#/platform/detection'
 import {type ImageMeta} from '#/state/gallery'
 import * as Toast from '#/view/com/util/Toast'
+import {VIDEO_MAX_DURATION_MS} from '../constants'
 import {getDataUriSize} from './util'
 
 export type PickerImage = ImageMeta & {
@@ -20,6 +23,8 @@ export async function openPicker(opts?: ImagePickerOptions) {
     selectionLimit: 1,
     ...opts,
     legacy: true,
+    preferredAssetRepresentationMode:
+      UIImagePickerPreferredAssetRepresentationMode.Automatic,
   })
 
   return (response.assets ?? [])
@@ -36,3 +41,22 @@ export async function openPicker(opts?: ImagePickerOptions) {
       size: getDataUriSize(image.uri),
     }))
 }
+
+export async function openUnifiedPicker({
+  selectionCountRemaining,
+}: {
+  selectionCountRemaining: number
+}) {
+  return await launchImageLibraryAsync({
+    exif: false,
+    mediaTypes: ['images', 'videos'],
+    quality: 1,
+    allowsMultipleSelection: true,
+    legacy: true,
+    base64: isWeb,
+    selectionLimit: isIOS ? selectionCountRemaining : undefined,
+    preferredAssetRepresentationMode:
+      UIImagePickerPreferredAssetRepresentationMode.Automatic,
+    videoMaxDuration: VIDEO_MAX_DURATION_MS / 1000,
+  })
+}