react-native-ensys-camera-x 1.0.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CustomCamera.podspec +20 -0
- package/LICENSE +20 -0
- package/README.md +833 -0
- package/android/build.gradle +135 -0
- package/android/consumer-rules.pro +47 -0
- package/android/src/main/AndroidManifest.xml +72 -0
- package/android/src/main/java/android/print/PdfPrint.java +51 -0
- package/android/src/main/java/com/customcamera/AnimatedImageViewManager.kt +199 -0
- package/android/src/main/java/com/customcamera/AudioPlayerView.kt +322 -0
- package/android/src/main/java/com/customcamera/AudioRecorder.kt +506 -0
- package/android/src/main/java/com/customcamera/BarcodeScannerActivity.kt +361 -0
- package/android/src/main/java/com/customcamera/BlurBackgroundView.kt +199 -0
- package/android/src/main/java/com/customcamera/CacheCleanupManager.kt +386 -0
- package/android/src/main/java/com/customcamera/CameraAspectRatioMode.kt +77 -0
- package/android/src/main/java/com/customcamera/CameraAsset.kt +211 -0
- package/android/src/main/java/com/customcamera/CameraTheme.kt +479 -0
- package/android/src/main/java/com/customcamera/CompressionCacheStore.kt +504 -0
- package/android/src/main/java/com/customcamera/CompressionFileNameUtils.kt +7 -0
- package/android/src/main/java/com/customcamera/CompressionProfile.kt +195 -0
- package/android/src/main/java/com/customcamera/CustomCameraActivity.kt +7291 -0
- package/android/src/main/java/com/customcamera/CustomCameraFileProvider.kt +9 -0
- package/android/src/main/java/com/customcamera/CustomCameraModule.kt +2479 -0
- package/android/src/main/java/com/customcamera/CustomCameraPackage.kt +53 -0
- package/android/src/main/java/com/customcamera/DisplayUtils.kt +9 -0
- package/android/src/main/java/com/customcamera/DocumentPreviewView.kt +846 -0
- package/android/src/main/java/com/customcamera/DrawingView.kt +214 -0
- package/android/src/main/java/com/customcamera/EmojiPickerData.kt +228 -0
- package/android/src/main/java/com/customcamera/FilterStripAdapter.kt +158 -0
- package/android/src/main/java/com/customcamera/GifSupport.kt +215 -0
- package/android/src/main/java/com/customcamera/GlobalAudioPlayer.kt +320 -0
- package/android/src/main/java/com/customcamera/ImageExporter.kt +1394 -0
- package/android/src/main/java/com/customcamera/ImageFormatSupport.kt +163 -0
- package/android/src/main/java/com/customcamera/Localization.kt +206 -0
- package/android/src/main/java/com/customcamera/MediaAdapters.kt +758 -0
- package/android/src/main/java/com/customcamera/MediaCacheManager.kt +782 -0
- package/android/src/main/java/com/customcamera/MediaExportFormats.kt +201 -0
- package/android/src/main/java/com/customcamera/MediaFileIo.kt +310 -0
- package/android/src/main/java/com/customcamera/MediaMetadataStore.kt +494 -0
- package/android/src/main/java/com/customcamera/MediaPreviewEditor.kt +14865 -0
- package/android/src/main/java/com/customcamera/MediaPublisher.kt +423 -0
- package/android/src/main/java/com/customcamera/MediaStorageWorkflow.kt +722 -0
- package/android/src/main/java/com/customcamera/MediaStoreRepository.kt +378 -0
- package/android/src/main/java/com/customcamera/MediaThumbnailView.kt +286 -0
- package/android/src/main/java/com/customcamera/MediaUtils.kt +37 -0
- package/android/src/main/java/com/customcamera/NativeVideoViewManager.kt +845 -0
- package/android/src/main/java/com/customcamera/OfficeDocumentConverter.kt +2791 -0
- package/android/src/main/java/com/customcamera/PendingCaptureCrops.kt +88 -0
- package/android/src/main/java/com/customcamera/PowerPointPreview.kt +4077 -0
- package/android/src/main/java/com/customcamera/RecentPickerStore.kt +74 -0
- package/android/src/main/java/com/customcamera/SecureFileEraser.kt +411 -0
- package/android/src/main/java/com/customcamera/SecureKeyModule.kt +88 -0
- package/android/src/main/java/com/customcamera/SecureMediaDeleter.kt +493 -0
- package/android/src/main/java/com/customcamera/StickerPickerData.kt +107 -0
- package/android/src/main/java/com/customcamera/SvgDrawable.kt +175 -0
- package/android/src/main/java/com/customcamera/SvgIconViewManager.kt +77 -0
- package/android/src/main/java/com/customcamera/TextEntryController.kt +553 -0
- package/android/src/main/java/com/customcamera/ThumbnailLoader.kt +455 -0
- package/android/src/main/java/com/customcamera/UploadService.kt +909 -0
- package/android/src/main/java/com/customcamera/VideoEditUtils.kt +210 -0
- package/android/src/main/java/com/customcamera/VideoRotationTranscoder.kt +1992 -0
- package/android/src/main/java/com/customcamera/gif/AnimatedGifEncoder.kt +473 -0
- package/android/src/main/java/com/customcamera/gif/GifDecoder.kt +690 -0
- package/android/src/main/java/com/customcamera/gif/GifFramesDrawable.kt +160 -0
- package/android/src/main/java/com/customcamera/gif/GifHttp.kt +112 -0
- package/android/src/main/java/com/customcamera/gif/GifImageLoader.kt +186 -0
- package/android/src/main/java/com/customcamera/gif/GifModels.kt +74 -0
- package/android/src/main/java/com/customcamera/gif/GifProvider.kt +49 -0
- package/android/src/main/java/com/customcamera/gif/GifProviders.kt +27 -0
- package/android/src/main/java/com/customcamera/gif/GifRepository.kt +124 -0
- package/android/src/main/java/com/customcamera/gif/GifSafety.kt +33 -0
- package/android/src/main/java/com/customcamera/gif/GiphyGifProvider.kt +146 -0
- package/android/src/main/java/com/customcamera/gif/LZWEncoder.kt +258 -0
- package/android/src/main/java/com/customcamera/gif/NeuQuant.kt +435 -0
- package/android/src/main/java/com/customcamera/gif/TenorGifProvider.kt +147 -0
- package/android/src/main/res/drawable/bg_brush_selected.xml +5 -0
- package/android/src/main/res/drawable/bg_color_swatch.xml +5 -0
- package/android/src/main/res/drawable/bg_editor_toolbar.xml +6 -0
- package/android/src/main/res/drawable/bg_icon_circle.xml +5 -0
- package/android/src/main/res/drawable/bg_icon_circle_light.xml +5 -0
- package/android/src/main/res/drawable/bg_mode_tab_active.xml +6 -0
- package/android/src/main/res/drawable/bg_pill.xml +6 -0
- package/android/src/main/res/drawable/bg_recording_dot.xml +6 -0
- package/android/src/main/res/drawable/bg_selection_badge.xml +8 -0
- package/android/src/main/res/drawable/bg_send_button.xml +5 -0
- package/android/src/main/res/drawable/bg_shutter_inner.xml +5 -0
- package/android/src/main/res/drawable/bg_shutter_recording.xml +6 -0
- package/android/src/main/res/drawable/bg_shutter_ring.xml +8 -0
- package/android/src/main/res/drawable/bg_shutter_video_idle.xml +5 -0
- package/android/src/main/res/drawable/bg_thumbnail.xml +9 -0
- package/android/src/main/res/drawable/ic_aspect_ratio.xml +17 -0
- package/android/src/main/res/drawable/ic_audio.xml +10 -0
- package/android/src/main/res/drawable/ic_back.xml +10 -0
- package/android/src/main/res/drawable/ic_brush_medium.xml +12 -0
- package/android/src/main/res/drawable/ic_brush_thick.xml +12 -0
- package/android/src/main/res/drawable/ic_brush_thin.xml +12 -0
- package/android/src/main/res/drawable/ic_check.xml +17 -0
- package/android/src/main/res/drawable/ic_chevron_down.xml +10 -0
- package/android/src/main/res/drawable/ic_chevron_up.xml +13 -0
- package/android/src/main/res/drawable/ic_clear_drawing.xml +10 -0
- package/android/src/main/res/drawable/ic_close.xml +10 -0
- package/android/src/main/res/drawable/ic_cover.xml +9 -0
- package/android/src/main/res/drawable/ic_crop.xml +10 -0
- package/android/src/main/res/drawable/ic_delete.xml +9 -0
- package/android/src/main/res/drawable/ic_document.xml +10 -0
- package/android/src/main/res/drawable/ic_done.xml +10 -0
- package/android/src/main/res/drawable/ic_download.xml +10 -0
- package/android/src/main/res/drawable/ic_emoji.xml +10 -0
- package/android/src/main/res/drawable/ic_filter.xml +10 -0
- package/android/src/main/res/drawable/ic_flash_auto.xml +7 -0
- package/android/src/main/res/drawable/ic_flash_off.xml +23 -0
- package/android/src/main/res/drawable/ic_flash_on.xml +16 -0
- package/android/src/main/res/drawable/ic_flip.xml +15 -0
- package/android/src/main/res/drawable/ic_gallery.xml +10 -0
- package/android/src/main/res/drawable/ic_gif.xml +24 -0
- package/android/src/main/res/drawable/ic_lock.xml +19 -0
- package/android/src/main/res/drawable/ic_lock_open.xml +22 -0
- package/android/src/main/res/drawable/ic_marker.xml +10 -0
- package/android/src/main/res/drawable/ic_more_vert.xml +18 -0
- package/android/src/main/res/drawable/ic_overlay_close.xml +19 -0
- package/android/src/main/res/drawable/ic_overlay_resize.xml +18 -0
- package/android/src/main/res/drawable/ic_pause.xml +10 -0
- package/android/src/main/res/drawable/ic_photo_mode.xml +10 -0
- package/android/src/main/res/drawable/ic_play.xml +10 -0
- package/android/src/main/res/drawable/ic_redo.xml +10 -0
- package/android/src/main/res/drawable/ic_rotate.xml +9 -0
- package/android/src/main/res/drawable/ic_send.xml +10 -0
- package/android/src/main/res/drawable/ic_share.xml +10 -0
- package/android/src/main/res/drawable/ic_stat_upload.xml +10 -0
- package/android/src/main/res/drawable/ic_sticker.xml +24 -0
- package/android/src/main/res/drawable/ic_text.xml +10 -0
- package/android/src/main/res/drawable/ic_text_align_center.xml +11 -0
- package/android/src/main/res/drawable/ic_text_align_left.xml +11 -0
- package/android/src/main/res/drawable/ic_text_align_right.xml +11 -0
- package/android/src/main/res/drawable/ic_text_bg.xml +11 -0
- package/android/src/main/res/drawable/ic_trim.xml +23 -0
- package/android/src/main/res/drawable/ic_undo.xml +10 -0
- package/android/src/main/res/drawable/ic_video_mode.xml +10 -0
- package/android/src/main/res/drawable/ic_video_note.xml +13 -0
- package/android/src/main/res/drawable/ic_volume_off.xml +9 -0
- package/android/src/main/res/drawable/ic_volume_on.xml +9 -0
- package/android/src/main/res/drawable/sticker_heart.xml +9 -0
- package/android/src/main/res/drawable/sticker_smile.xml +9 -0
- package/android/src/main/res/drawable/sticker_star.xml +9 -0
- package/android/src/main/res/drawable/sticker_thumbsup.xml +9 -0
- package/android/src/main/res/values/colors.xml +34 -0
- package/android/src/main/res/values/ids.xml +15 -0
- package/android/src/main/res/values/strings.xml +15 -0
- package/android/src/main/res/values/styles.xml +20 -0
- package/android/src/main/res/xml/file_paths.xml +34 -0
- package/ios/CustomCamera.h +5 -0
- package/ios/CustomCamera.mm +214 -0
- package/lib/module/AudioPlayerContext.js +233 -0
- package/lib/module/AudioPlayerContext.js.map +1 -0
- package/lib/module/CameraPreview.js +304 -0
- package/lib/module/CameraPreview.js.map +1 -0
- package/lib/module/NativeAnimatedImageView.js +41 -0
- package/lib/module/NativeAnimatedImageView.js.map +1 -0
- package/lib/module/NativeAudioPlayerView.js +33 -0
- package/lib/module/NativeAudioPlayerView.js.map +1 -0
- package/lib/module/NativeBlurView.js +35 -0
- package/lib/module/NativeBlurView.js.map +1 -0
- package/lib/module/NativeCustomCamera.js +128 -0
- package/lib/module/NativeCustomCamera.js.map +1 -0
- package/lib/module/NativeCustomCamera.web.js +143 -0
- package/lib/module/NativeCustomCamera.web.js.map +1 -0
- package/lib/module/NativeCustomVideoView.js +5 -0
- package/lib/module/NativeCustomVideoView.js.map +1 -0
- package/lib/module/NativeDocumentPreviewView.js +156 -0
- package/lib/module/NativeDocumentPreviewView.js.map +1 -0
- package/lib/module/NativeMediaThumbnailView.js +110 -0
- package/lib/module/NativeMediaThumbnailView.js.map +1 -0
- package/lib/module/NativeSvgIcon.js +32 -0
- package/lib/module/NativeSvgIcon.js.map +1 -0
- package/lib/module/ResponsivePreviewContainer.js +171 -0
- package/lib/module/ResponsivePreviewContainer.js.map +1 -0
- package/lib/module/accessibility.js +61 -0
- package/lib/module/accessibility.js.map +1 -0
- package/lib/module/config.js +352 -0
- package/lib/module/config.js.map +1 -0
- package/lib/module/cpuOptimization.js +296 -0
- package/lib/module/cpuOptimization.js.map +1 -0
- package/lib/module/db/DatabaseManager.js +191 -0
- package/lib/module/db/DatabaseManager.js.map +1 -0
- package/lib/module/db/MediaMapper.js +284 -0
- package/lib/module/db/MediaMapper.js.map +1 -0
- package/lib/module/db/MediaRepository.js +242 -0
- package/lib/module/db/MediaRepository.js.map +1 -0
- package/lib/module/db/index.js +41 -0
- package/lib/module/db/index.js.map +1 -0
- package/lib/module/db/migrations.js +180 -0
- package/lib/module/db/migrations.js.map +1 -0
- package/lib/module/db/react-native-sqlcipher.d.js +2 -0
- package/lib/module/db/react-native-sqlcipher.d.js.map +1 -0
- package/lib/module/db/secureKey.js +87 -0
- package/lib/module/db/secureKey.js.map +1 -0
- package/lib/module/db/types.js +57 -0
- package/lib/module/db/types.js.map +1 -0
- package/lib/module/db/useMediaDatabase.js +123 -0
- package/lib/module/db/useMediaDatabase.js.map +1 -0
- package/lib/module/defaultIcons.js +2259 -0
- package/lib/module/defaultIcons.js.map +1 -0
- package/lib/module/deviceCapabilities.js +408 -0
- package/lib/module/deviceCapabilities.js.map +1 -0
- package/lib/module/errors.js +267 -0
- package/lib/module/errors.js.map +1 -0
- package/lib/module/iconConfig.js +796 -0
- package/lib/module/iconConfig.js.map +1 -0
- package/lib/module/icons.js +514 -0
- package/lib/module/icons.js.map +1 -0
- package/lib/module/index.js +251 -0
- package/lib/module/index.js.map +1 -0
- package/lib/module/jest-globals.d.js +2 -0
- package/lib/module/jest-globals.d.js.map +1 -0
- package/lib/module/library/MediaLibrary.js +107 -0
- package/lib/module/library/MediaLibrary.js.map +1 -0
- package/lib/module/library/MediaLibraryScreen.js +2597 -0
- package/lib/module/library/MediaLibraryScreen.js.map +1 -0
- package/lib/module/library/components/AudioPreview.js +74 -0
- package/lib/module/library/components/AudioPreview.js.map +1 -0
- package/lib/module/library/components/DocumentPreview.js +331 -0
- package/lib/module/library/components/DocumentPreview.js.map +1 -0
- package/lib/module/library/components/ExpandableFab.js +343 -0
- package/lib/module/library/components/ExpandableFab.js.map +1 -0
- package/lib/module/library/components/FileTiles.js +251 -0
- package/lib/module/library/components/FileTiles.js.map +1 -0
- package/lib/module/library/components/ImagePreview.js +70 -0
- package/lib/module/library/components/ImagePreview.js.map +1 -0
- package/lib/module/library/components/MediaMetadataHeader.js +175 -0
- package/lib/module/library/components/MediaMetadataHeader.js.map +1 -0
- package/lib/module/library/components/RecordAudioScreen.js +816 -0
- package/lib/module/library/components/RecordAudioScreen.js.map +1 -0
- package/lib/module/library/components/VideoPreview.js +453 -0
- package/lib/module/library/components/VideoPreview.js.map +1 -0
- package/lib/module/library/components/ViewerCounter.js +55 -0
- package/lib/module/library/components/ViewerCounter.js.map +1 -0
- package/lib/module/library/compressionEstimate.js +507 -0
- package/lib/module/library/compressionEstimate.js.map +1 -0
- package/lib/module/library/fileMetadata.js +196 -0
- package/lib/module/library/fileMetadata.js.map +1 -0
- package/lib/module/library/index.js +42 -0
- package/lib/module/library/index.js.map +1 -0
- package/lib/module/library/libraryIconRegistry.js +69 -0
- package/lib/module/library/libraryIconRegistry.js.map +1 -0
- package/lib/module/library/libraryIcons.js +858 -0
- package/lib/module/library/libraryIcons.js.map +1 -0
- package/lib/module/library/localizedFormat.js +181 -0
- package/lib/module/library/localizedFormat.js.map +1 -0
- package/lib/module/library/palette.js +225 -0
- package/lib/module/library/palette.js.map +1 -0
- package/lib/module/library/responsive.js +53 -0
- package/lib/module/library/responsive.js.map +1 -0
- package/lib/module/locales.js +416 -0
- package/lib/module/locales.js.map +1 -0
- package/lib/module/localization.js +1064 -0
- package/lib/module/localization.js.map +1 -0
- package/lib/module/logger.js +20 -0
- package/lib/module/logger.js.map +1 -0
- package/lib/module/lowMemoryCache.js +206 -0
- package/lib/module/lowMemoryCache.js.map +1 -0
- package/lib/module/mediaHistory.js +33 -0
- package/lib/module/mediaHistory.js.map +1 -0
- package/lib/module/mediaStorageService.js +402 -0
- package/lib/module/mediaStorageService.js.map +1 -0
- package/lib/module/memory.js +79 -0
- package/lib/module/memory.js.map +1 -0
- package/lib/module/nativeActions.js +307 -0
- package/lib/module/nativeActions.js.map +1 -0
- package/lib/module/nativeComponentSupport.js +61 -0
- package/lib/module/nativeComponentSupport.js.map +1 -0
- package/lib/module/networkPerformance.js +24 -0
- package/lib/module/networkPerformance.js.map +1 -0
- package/lib/module/package.json +1 -0
- package/lib/module/performance.js +104 -0
- package/lib/module/performance.js.map +1 -0
- package/lib/module/performanceMonitor.js +155 -0
- package/lib/module/performanceMonitor.js.map +1 -0
- package/lib/module/permissions.js +370 -0
- package/lib/module/permissions.js.map +1 -0
- package/lib/module/rendering.js +40 -0
- package/lib/module/rendering.js.map +1 -0
- package/lib/module/security.js +18 -0
- package/lib/module/security.js.map +1 -0
- package/lib/module/state.js +266 -0
- package/lib/module/state.js.map +1 -0
- package/lib/module/storage.js +400 -0
- package/lib/module/storage.js.map +1 -0
- package/lib/module/theme.js +390 -0
- package/lib/module/theme.js.map +1 -0
- package/lib/module/types.js +4 -0
- package/lib/module/types.js.map +1 -0
- package/lib/module/utils.js +115 -0
- package/lib/module/utils.js.map +1 -0
- package/lib/module/validation.js +288 -0
- package/lib/module/validation.js.map +1 -0
- package/lib/typescript/package.json +1 -0
- package/lib/typescript/src/AudioPlayerContext.d.ts +27 -0
- package/lib/typescript/src/AudioPlayerContext.d.ts.map +1 -0
- package/lib/typescript/src/CameraPreview.d.ts +13 -0
- package/lib/typescript/src/CameraPreview.d.ts.map +1 -0
- package/lib/typescript/src/NativeAnimatedImageView.d.ts +33 -0
- package/lib/typescript/src/NativeAnimatedImageView.d.ts.map +1 -0
- package/lib/typescript/src/NativeAudioPlayerView.d.ts +12 -0
- package/lib/typescript/src/NativeAudioPlayerView.d.ts.map +1 -0
- package/lib/typescript/src/NativeBlurView.d.ts +12 -0
- package/lib/typescript/src/NativeBlurView.d.ts.map +1 -0
- package/lib/typescript/src/NativeCustomCamera.d.ts +167 -0
- package/lib/typescript/src/NativeCustomCamera.d.ts.map +1 -0
- package/lib/typescript/src/NativeCustomCamera.web.d.ts +47 -0
- package/lib/typescript/src/NativeCustomCamera.web.d.ts.map +1 -0
- package/lib/typescript/src/NativeCustomVideoView.d.ts +30 -0
- package/lib/typescript/src/NativeCustomVideoView.d.ts.map +1 -0
- package/lib/typescript/src/NativeDocumentPreviewView.d.ts +48 -0
- package/lib/typescript/src/NativeDocumentPreviewView.d.ts.map +1 -0
- package/lib/typescript/src/NativeMediaThumbnailView.d.ts +54 -0
- package/lib/typescript/src/NativeMediaThumbnailView.d.ts.map +1 -0
- package/lib/typescript/src/NativeSvgIcon.d.ts +25 -0
- package/lib/typescript/src/NativeSvgIcon.d.ts.map +1 -0
- package/lib/typescript/src/ResponsivePreviewContainer.d.ts +92 -0
- package/lib/typescript/src/ResponsivePreviewContainer.d.ts.map +1 -0
- package/lib/typescript/src/accessibility.d.ts +20 -0
- package/lib/typescript/src/accessibility.d.ts.map +1 -0
- package/lib/typescript/src/config.d.ts +145 -0
- package/lib/typescript/src/config.d.ts.map +1 -0
- package/lib/typescript/src/cpuOptimization.d.ts +63 -0
- package/lib/typescript/src/cpuOptimization.d.ts.map +1 -0
- package/lib/typescript/src/db/DatabaseManager.d.ts +48 -0
- package/lib/typescript/src/db/DatabaseManager.d.ts.map +1 -0
- package/lib/typescript/src/db/MediaMapper.d.ts +77 -0
- package/lib/typescript/src/db/MediaMapper.d.ts.map +1 -0
- package/lib/typescript/src/db/MediaRepository.d.ts +66 -0
- package/lib/typescript/src/db/MediaRepository.d.ts.map +1 -0
- package/lib/typescript/src/db/index.d.ts +23 -0
- package/lib/typescript/src/db/index.d.ts.map +1 -0
- package/lib/typescript/src/db/migrations.d.ts +31 -0
- package/lib/typescript/src/db/migrations.d.ts.map +1 -0
- package/lib/typescript/src/db/secureKey.d.ts +10 -0
- package/lib/typescript/src/db/secureKey.d.ts.map +1 -0
- package/lib/typescript/src/db/types.d.ts +115 -0
- package/lib/typescript/src/db/types.d.ts.map +1 -0
- package/lib/typescript/src/db/useMediaDatabase.d.ts +41 -0
- package/lib/typescript/src/db/useMediaDatabase.d.ts.map +1 -0
- package/lib/typescript/src/defaultIcons.d.ts +139 -0
- package/lib/typescript/src/defaultIcons.d.ts.map +1 -0
- package/lib/typescript/src/deviceCapabilities.d.ts +92 -0
- package/lib/typescript/src/deviceCapabilities.d.ts.map +1 -0
- package/lib/typescript/src/errors.d.ts +95 -0
- package/lib/typescript/src/errors.d.ts.map +1 -0
- package/lib/typescript/src/iconConfig.d.ts +176 -0
- package/lib/typescript/src/iconConfig.d.ts.map +1 -0
- package/lib/typescript/src/icons.d.ts +217 -0
- package/lib/typescript/src/icons.d.ts.map +1 -0
- package/lib/typescript/src/index.d.ts +104 -0
- package/lib/typescript/src/index.d.ts.map +1 -0
- package/lib/typescript/src/library/MediaLibrary.d.ts +57 -0
- package/lib/typescript/src/library/MediaLibrary.d.ts.map +1 -0
- package/lib/typescript/src/library/MediaLibraryScreen.d.ts +51 -0
- package/lib/typescript/src/library/MediaLibraryScreen.d.ts.map +1 -0
- package/lib/typescript/src/library/components/AudioPreview.d.ts +6 -0
- package/lib/typescript/src/library/components/AudioPreview.d.ts.map +1 -0
- package/lib/typescript/src/library/components/DocumentPreview.d.ts +10 -0
- package/lib/typescript/src/library/components/DocumentPreview.d.ts.map +1 -0
- package/lib/typescript/src/library/components/ExpandableFab.d.ts +39 -0
- package/lib/typescript/src/library/components/ExpandableFab.d.ts.map +1 -0
- package/lib/typescript/src/library/components/FileTiles.d.ts +8 -0
- package/lib/typescript/src/library/components/FileTiles.d.ts.map +1 -0
- package/lib/typescript/src/library/components/ImagePreview.d.ts +5 -0
- package/lib/typescript/src/library/components/ImagePreview.d.ts.map +1 -0
- package/lib/typescript/src/library/components/MediaMetadataHeader.d.ts +16 -0
- package/lib/typescript/src/library/components/MediaMetadataHeader.d.ts.map +1 -0
- package/lib/typescript/src/library/components/RecordAudioScreen.d.ts +8 -0
- package/lib/typescript/src/library/components/RecordAudioScreen.d.ts.map +1 -0
- package/lib/typescript/src/library/components/VideoPreview.d.ts +20 -0
- package/lib/typescript/src/library/components/VideoPreview.d.ts.map +1 -0
- package/lib/typescript/src/library/components/ViewerCounter.d.ts +13 -0
- package/lib/typescript/src/library/components/ViewerCounter.d.ts.map +1 -0
- package/lib/typescript/src/library/compressionEstimate.d.ts +313 -0
- package/lib/typescript/src/library/compressionEstimate.d.ts.map +1 -0
- package/lib/typescript/src/library/fileMetadata.d.ts +33 -0
- package/lib/typescript/src/library/fileMetadata.d.ts.map +1 -0
- package/lib/typescript/src/library/index.d.ts +40 -0
- package/lib/typescript/src/library/index.d.ts.map +1 -0
- package/lib/typescript/src/library/libraryIconRegistry.d.ts +35 -0
- package/lib/typescript/src/library/libraryIconRegistry.d.ts.map +1 -0
- package/lib/typescript/src/library/libraryIcons.d.ts +85 -0
- package/lib/typescript/src/library/libraryIcons.d.ts.map +1 -0
- package/lib/typescript/src/library/localizedFormat.d.ts +49 -0
- package/lib/typescript/src/library/localizedFormat.d.ts.map +1 -0
- package/lib/typescript/src/library/palette.d.ts +104 -0
- package/lib/typescript/src/library/palette.d.ts.map +1 -0
- package/lib/typescript/src/library/responsive.d.ts +15 -0
- package/lib/typescript/src/library/responsive.d.ts.map +1 -0
- package/lib/typescript/src/locales.d.ts +103 -0
- package/lib/typescript/src/locales.d.ts.map +1 -0
- package/lib/typescript/src/localization.d.ts +1051 -0
- package/lib/typescript/src/localization.d.ts.map +1 -0
- package/lib/typescript/src/logger.d.ts +4 -0
- package/lib/typescript/src/logger.d.ts.map +1 -0
- package/lib/typescript/src/lowMemoryCache.d.ts +64 -0
- package/lib/typescript/src/lowMemoryCache.d.ts.map +1 -0
- package/lib/typescript/src/mediaHistory.d.ts +3 -0
- package/lib/typescript/src/mediaHistory.d.ts.map +1 -0
- package/lib/typescript/src/mediaStorageService.d.ts +155 -0
- package/lib/typescript/src/mediaStorageService.d.ts.map +1 -0
- package/lib/typescript/src/memory.d.ts +21 -0
- package/lib/typescript/src/memory.d.ts.map +1 -0
- package/lib/typescript/src/nativeActions.d.ts +174 -0
- package/lib/typescript/src/nativeActions.d.ts.map +1 -0
- package/lib/typescript/src/nativeComponentSupport.d.ts +30 -0
- package/lib/typescript/src/nativeComponentSupport.d.ts.map +1 -0
- package/lib/typescript/src/networkPerformance.d.ts +12 -0
- package/lib/typescript/src/networkPerformance.d.ts.map +1 -0
- package/lib/typescript/src/performance.d.ts +32 -0
- package/lib/typescript/src/performance.d.ts.map +1 -0
- package/lib/typescript/src/performanceMonitor.d.ts +45 -0
- package/lib/typescript/src/performanceMonitor.d.ts.map +1 -0
- package/lib/typescript/src/permissions.d.ts +132 -0
- package/lib/typescript/src/permissions.d.ts.map +1 -0
- package/lib/typescript/src/rendering.d.ts +9 -0
- package/lib/typescript/src/rendering.d.ts.map +1 -0
- package/lib/typescript/src/security.d.ts +6 -0
- package/lib/typescript/src/security.d.ts.map +1 -0
- package/lib/typescript/src/state.d.ts +102 -0
- package/lib/typescript/src/state.d.ts.map +1 -0
- package/lib/typescript/src/storage.d.ts +117 -0
- package/lib/typescript/src/storage.d.ts.map +1 -0
- package/lib/typescript/src/theme.d.ts +15 -0
- package/lib/typescript/src/theme.d.ts.map +1 -0
- package/lib/typescript/src/types.d.ts +802 -0
- package/lib/typescript/src/types.d.ts.map +1 -0
- package/lib/typescript/src/utils.d.ts +50 -0
- package/lib/typescript/src/utils.d.ts.map +1 -0
- package/lib/typescript/src/validation.d.ts +52 -0
- package/lib/typescript/src/validation.d.ts.map +1 -0
- package/package.json +204 -0
- package/react-native.config.js +17 -0
- package/src/AudioPlayerContext.tsx +220 -0
- package/src/CameraPreview.tsx +352 -0
- package/src/NativeAnimatedImageView.tsx +71 -0
- package/src/NativeAudioPlayerView.tsx +39 -0
- package/src/NativeBlurView.tsx +40 -0
- package/src/NativeCustomCamera.ts +305 -0
- package/src/NativeCustomCamera.web.ts +192 -0
- package/src/NativeCustomVideoView.ts +30 -0
- package/src/NativeDocumentPreviewView.tsx +196 -0
- package/src/NativeMediaThumbnailView.tsx +167 -0
- package/src/NativeSvgIcon.tsx +46 -0
- package/src/ResponsivePreviewContainer.tsx +227 -0
- package/src/accessibility.ts +80 -0
- package/src/config.ts +406 -0
- package/src/cpuOptimization.ts +365 -0
- package/src/db/DatabaseManager.ts +212 -0
- package/src/db/MediaMapper.ts +377 -0
- package/src/db/MediaRepository.ts +313 -0
- package/src/db/index.ts +73 -0
- package/src/db/migrations.ts +222 -0
- package/src/db/react-native-sqlcipher.d.ts +76 -0
- package/src/db/secureKey.ts +100 -0
- package/src/db/types.ts +123 -0
- package/src/db/useMediaDatabase.ts +191 -0
- package/src/defaultIcons.tsx +2390 -0
- package/src/deviceCapabilities.ts +438 -0
- package/src/errors.ts +350 -0
- package/src/iconConfig.tsx +962 -0
- package/src/icons.tsx +788 -0
- package/src/index.tsx +763 -0
- package/src/jest-globals.d.ts +9 -0
- package/src/library/MediaLibrary.tsx +141 -0
- package/src/library/MediaLibraryScreen.tsx +3003 -0
- package/src/library/components/AudioPreview.tsx +73 -0
- package/src/library/components/DocumentPreview.tsx +361 -0
- package/src/library/components/ExpandableFab.tsx +342 -0
- package/src/library/components/FileTiles.tsx +252 -0
- package/src/library/components/ImagePreview.tsx +72 -0
- package/src/library/components/MediaMetadataHeader.tsx +208 -0
- package/src/library/components/RecordAudioScreen.tsx +845 -0
- package/src/library/components/VideoPreview.tsx +478 -0
- package/src/library/components/ViewerCounter.tsx +71 -0
- package/src/library/compressionEstimate.ts +662 -0
- package/src/library/fileMetadata.ts +212 -0
- package/src/library/index.ts +66 -0
- package/src/library/libraryIconRegistry.tsx +86 -0
- package/src/library/libraryIcons.tsx +928 -0
- package/src/library/localizedFormat.ts +207 -0
- package/src/library/palette.ts +281 -0
- package/src/library/responsive.ts +49 -0
- package/src/locales.ts +381 -0
- package/src/localization.ts +1947 -0
- package/src/logger.ts +20 -0
- package/src/lowMemoryCache.ts +218 -0
- package/src/mediaHistory.ts +42 -0
- package/src/mediaStorageService.ts +546 -0
- package/src/memory.ts +102 -0
- package/src/nativeActions.ts +422 -0
- package/src/nativeComponentSupport.ts +60 -0
- package/src/networkPerformance.ts +30 -0
- package/src/performance.ts +137 -0
- package/src/performanceMonitor.ts +219 -0
- package/src/permissions.ts +403 -0
- package/src/rendering.ts +47 -0
- package/src/security.ts +19 -0
- package/src/state.ts +333 -0
- package/src/storage.ts +453 -0
- package/src/theme.tsx +467 -0
- package/src/types.ts +946 -0
- package/src/utils.ts +177 -0
- package/src/validation.ts +372 -0
|
@@ -0,0 +1,296 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
/// <reference lib="dom" />
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* CPU optimization utilities for low-end devices
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
import { devWarn } from "./logger.js";
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Debounce function optimized for low-end devices
|
|
13
|
+
* Longer default delay to reduce CPU load
|
|
14
|
+
*/
|
|
15
|
+
export function debounceForLowEnd(func, wait = 500 // Longer debounce for low-end
|
|
16
|
+
) {
|
|
17
|
+
let timeout = null;
|
|
18
|
+
return function (...args) {
|
|
19
|
+
if (timeout) {
|
|
20
|
+
clearTimeout(timeout);
|
|
21
|
+
}
|
|
22
|
+
timeout = setTimeout(() => {
|
|
23
|
+
// Use requestIdleCallback if available for better CPU management
|
|
24
|
+
const nativeGlobal = global;
|
|
25
|
+
if (typeof nativeGlobal.requestIdleCallback === 'function') {
|
|
26
|
+
nativeGlobal.requestIdleCallback(() => func(...args), {
|
|
27
|
+
timeout: 1000
|
|
28
|
+
});
|
|
29
|
+
} else {
|
|
30
|
+
func(...args);
|
|
31
|
+
}
|
|
32
|
+
}, wait);
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Throttle function optimized for low-end devices
|
|
38
|
+
* Longer limit to reduce CPU load
|
|
39
|
+
*/
|
|
40
|
+
export function throttleForLowEnd(func, limit = 1000 // Longer throttle for low-end
|
|
41
|
+
) {
|
|
42
|
+
let lastFunc = null;
|
|
43
|
+
let lastRan = 0;
|
|
44
|
+
return function (...args) {
|
|
45
|
+
if (!lastRan) {
|
|
46
|
+
func(...args);
|
|
47
|
+
lastRan = Date.now();
|
|
48
|
+
} else {
|
|
49
|
+
if (lastFunc) {
|
|
50
|
+
clearTimeout(lastFunc);
|
|
51
|
+
}
|
|
52
|
+
lastFunc = setTimeout(() => {
|
|
53
|
+
if (Date.now() - lastRan >= limit) {
|
|
54
|
+
func(...args);
|
|
55
|
+
lastRan = Date.now();
|
|
56
|
+
}
|
|
57
|
+
}, limit - (Date.now() - lastRan));
|
|
58
|
+
}
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* Run operation in background with priority control
|
|
64
|
+
* Uses requestIdleCallback when available
|
|
65
|
+
*/
|
|
66
|
+
export async function runInBackgroundWithPriority(operation, priority = 'low') {
|
|
67
|
+
if (priority === 'low') {
|
|
68
|
+
await Promise.resolve();
|
|
69
|
+
}
|
|
70
|
+
await operation();
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* Create lazy initializer that defers execution
|
|
75
|
+
* Uses requestIdleCallback when available
|
|
76
|
+
*/
|
|
77
|
+
export function createLazyInitializer(initializer) {
|
|
78
|
+
let value = null;
|
|
79
|
+
let initialized = false;
|
|
80
|
+
let initializing = false;
|
|
81
|
+
let callbacks = [];
|
|
82
|
+
const initialize = () => {
|
|
83
|
+
if (initializing) return;
|
|
84
|
+
initializing = true;
|
|
85
|
+
const nativeGlobal = global;
|
|
86
|
+
if (typeof nativeGlobal.requestIdleCallback === 'function') {
|
|
87
|
+
nativeGlobal.requestIdleCallback(() => {
|
|
88
|
+
try {
|
|
89
|
+
value = initializer();
|
|
90
|
+
initialized = true;
|
|
91
|
+
callbacks.forEach(cb => cb(value));
|
|
92
|
+
callbacks = [];
|
|
93
|
+
} catch {
|
|
94
|
+
// Silently fail lazy initialization
|
|
95
|
+
}
|
|
96
|
+
initializing = false;
|
|
97
|
+
}, {
|
|
98
|
+
timeout: 1000
|
|
99
|
+
});
|
|
100
|
+
|
|
101
|
+
// Fallback if idle callback doesn't fire
|
|
102
|
+
setTimeout(() => {
|
|
103
|
+
if (!initialized && !initializing) {
|
|
104
|
+
try {
|
|
105
|
+
value = initializer();
|
|
106
|
+
initialized = true;
|
|
107
|
+
callbacks.forEach(cb => cb(value));
|
|
108
|
+
callbacks = [];
|
|
109
|
+
} catch {
|
|
110
|
+
// Silently fail
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}, 1000);
|
|
114
|
+
} else {
|
|
115
|
+
try {
|
|
116
|
+
value = initializer();
|
|
117
|
+
initialized = true;
|
|
118
|
+
callbacks.forEach(cb => cb(value));
|
|
119
|
+
callbacks = [];
|
|
120
|
+
} catch {
|
|
121
|
+
// Silently fail
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
};
|
|
125
|
+
return () => {
|
|
126
|
+
if (!initialized) {
|
|
127
|
+
if (!initializing) {
|
|
128
|
+
initialize();
|
|
129
|
+
}
|
|
130
|
+
return new Promise(resolve => {
|
|
131
|
+
callbacks.push(resolve);
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
return value;
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
/**
|
|
139
|
+
* Process operations in chunks to avoid blocking UI
|
|
140
|
+
*/
|
|
141
|
+
export async function processInChunks(operations) {
|
|
142
|
+
const results = [];
|
|
143
|
+
for (const operation of operations) {
|
|
144
|
+
await Promise.resolve();
|
|
145
|
+
try {
|
|
146
|
+
const result = await operation();
|
|
147
|
+
results.push(result);
|
|
148
|
+
} catch (error) {
|
|
149
|
+
throw error;
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
return results;
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
/**
|
|
156
|
+
* CPU-efficient delay that yields to main thread
|
|
157
|
+
*/
|
|
158
|
+
export function efficientDelay(ms) {
|
|
159
|
+
return new Promise(resolve => {
|
|
160
|
+
if (ms <= 0) {
|
|
161
|
+
resolve();
|
|
162
|
+
return;
|
|
163
|
+
}
|
|
164
|
+
const start = performance.now();
|
|
165
|
+
while (performance.now() - start < ms) {
|
|
166
|
+
// Busy-wait briefly to provide a real delay without depending on timers
|
|
167
|
+
}
|
|
168
|
+
resolve();
|
|
169
|
+
});
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
/**
|
|
173
|
+
* Check if current thread is busy
|
|
174
|
+
*/
|
|
175
|
+
export function isMainThreadBusy() {
|
|
176
|
+
// Simple heuristic for busyness
|
|
177
|
+
const start = performance.now();
|
|
178
|
+
let computation = 0;
|
|
179
|
+
|
|
180
|
+
// Small computation to check responsiveness
|
|
181
|
+
for (let i = 0; i < 1000; i += 1) {
|
|
182
|
+
computation += i;
|
|
183
|
+
}
|
|
184
|
+
const duration = performance.now() - start;
|
|
185
|
+
if (computation === 0) {
|
|
186
|
+
return false;
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
// If simple computation takes too long, thread is busy
|
|
190
|
+
return duration > 5; // More than 5ms indicates busyness
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
/**
|
|
194
|
+
* Wait for main thread to be available
|
|
195
|
+
*/
|
|
196
|
+
export async function waitForMainThreadAvailable(maxWait = 1000, checkInterval = 50) {
|
|
197
|
+
const startTime = Date.now();
|
|
198
|
+
while (Date.now() - startTime < maxWait) {
|
|
199
|
+
if (!isMainThreadBusy()) {
|
|
200
|
+
return;
|
|
201
|
+
}
|
|
202
|
+
await efficientDelay(checkInterval);
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
// Timeout reached
|
|
206
|
+
devWarn('Main thread remained busy for too long');
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
/**
|
|
210
|
+
* CPU-efficient animation frame handler
|
|
211
|
+
*/
|
|
212
|
+
export function requestEfficientAnimationFrame(callback) {
|
|
213
|
+
if (isMainThreadBusy()) {
|
|
214
|
+
// If main thread is busy, use setTimeout instead
|
|
215
|
+
const handle = setTimeout(() => {
|
|
216
|
+
const time = performance.now();
|
|
217
|
+
callback(time);
|
|
218
|
+
}, 16); // ~60fps
|
|
219
|
+
return handle;
|
|
220
|
+
}
|
|
221
|
+
return requestAnimationFrame(callback);
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
/**
|
|
225
|
+
* Cancel efficient animation frame
|
|
226
|
+
*/
|
|
227
|
+
export function cancelEfficientAnimationFrame(handle) {
|
|
228
|
+
try {
|
|
229
|
+
cancelAnimationFrame(handle);
|
|
230
|
+
} catch {
|
|
231
|
+
// If it was a setTimeout, clear it
|
|
232
|
+
clearTimeout(handle);
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
/**
|
|
237
|
+
* Get CPU optimization level based on device specs
|
|
238
|
+
*/
|
|
239
|
+
export function getCpuOptimizationLevel(ram, processor) {
|
|
240
|
+
if (ram === 'low' || processor === 'weak') {
|
|
241
|
+
return 'aggressive';
|
|
242
|
+
}
|
|
243
|
+
if (ram === 'medium' || processor === 'medium') {
|
|
244
|
+
return 'moderate';
|
|
245
|
+
}
|
|
246
|
+
return 'none';
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
/**
|
|
250
|
+
* Check if device supports requestIdleCallback
|
|
251
|
+
*/
|
|
252
|
+
export function supportsIdleCallback() {
|
|
253
|
+
const nativeGlobal = global;
|
|
254
|
+
return typeof nativeGlobal.requestIdleCallback === 'function';
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
/**
|
|
258
|
+
* Polyfill for requestIdleCallback
|
|
259
|
+
*/
|
|
260
|
+
export function requestIdleCallbackPolyfill(callback, options) {
|
|
261
|
+
if (supportsIdleCallback()) {
|
|
262
|
+
const nativeGlobal = global;
|
|
263
|
+
const idleCallback = nativeGlobal.requestIdleCallback;
|
|
264
|
+
if (typeof idleCallback === 'function') {
|
|
265
|
+
return idleCallback(callback, options);
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
// Polyfill using setTimeout
|
|
270
|
+
const timeout = options?.timeout || 5000;
|
|
271
|
+
const start = Date.now();
|
|
272
|
+
const handle = setTimeout(() => {
|
|
273
|
+
callback({
|
|
274
|
+
didTimeout: false,
|
|
275
|
+
timeRemaining: () => Math.max(0, timeout - (Date.now() - start))
|
|
276
|
+
});
|
|
277
|
+
}, 16); // Next animation frame
|
|
278
|
+
|
|
279
|
+
return handle;
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
/**
|
|
283
|
+
* Cancel polyfilled idle callback
|
|
284
|
+
*/
|
|
285
|
+
export function cancelIdleCallbackPolyfill(handle) {
|
|
286
|
+
const nativeGlobal = global;
|
|
287
|
+
if (supportsIdleCallback() && typeof nativeGlobal.cancelIdleCallback === 'function') {
|
|
288
|
+
const idleCancelCallback = nativeGlobal.cancelIdleCallback;
|
|
289
|
+
if (typeof idleCancelCallback === 'function') {
|
|
290
|
+
idleCancelCallback(handle);
|
|
291
|
+
}
|
|
292
|
+
} else {
|
|
293
|
+
clearTimeout(handle);
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
//# sourceMappingURL=cpuOptimization.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["devWarn","debounceForLowEnd","func","wait","timeout","args","clearTimeout","setTimeout","nativeGlobal","global","requestIdleCallback","throttleForLowEnd","limit","lastFunc","lastRan","Date","now","runInBackgroundWithPriority","operation","priority","Promise","resolve","createLazyInitializer","initializer","value","initialized","initializing","callbacks","initialize","forEach","cb","push","processInChunks","operations","results","result","error","efficientDelay","ms","start","performance","isMainThreadBusy","computation","i","duration","waitForMainThreadAvailable","maxWait","checkInterval","startTime","requestEfficientAnimationFrame","callback","handle","time","requestAnimationFrame","cancelEfficientAnimationFrame","cancelAnimationFrame","getCpuOptimizationLevel","ram","processor","supportsIdleCallback","requestIdleCallbackPolyfill","options","idleCallback","didTimeout","timeRemaining","Math","max","cancelIdleCallbackPolyfill","cancelIdleCallback","idleCancelCallback"],"sourceRoot":"..\\..\\src","sources":["cpuOptimization.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* DatabaseManager — the single, centralized owner of the encrypted SQLCipher
|
|
5
|
+
* connection.
|
|
6
|
+
*
|
|
7
|
+
* Responsibilities:
|
|
8
|
+
* - Lazily open the encrypted database exactly once (idempotent `init`).
|
|
9
|
+
* - Provision the encryption key via the Keystore-backed `secureKey` helper.
|
|
10
|
+
* - Run schema migrations on open.
|
|
11
|
+
* - Expose small, safe primitives (`exec`, `query`, `transaction`) that the
|
|
12
|
+
* repository layer builds on — nothing above this file touches the raw driver.
|
|
13
|
+
*
|
|
14
|
+
* The `react-native-sqlcipher` native driver is imported lazily so the bundle
|
|
15
|
+
* still loads on platforms where it is absent (e.g. web); callers get a clear
|
|
16
|
+
* error instead of a hard crash at import time.
|
|
17
|
+
*/
|
|
18
|
+
import { Platform } from 'react-native';
|
|
19
|
+
import { getDatabaseKey } from "./secureKey.js";
|
|
20
|
+
import { runMigrations } from "./migrations.js";
|
|
21
|
+
const DATABASE_NAME = 'media_secure.db';
|
|
22
|
+
const DATABASE_LOCATION = 'default';
|
|
23
|
+
|
|
24
|
+
/** A single parameterized statement for {@link DatabaseManager.batch}. */
|
|
25
|
+
|
|
26
|
+
/** Loads the native SQLCipher module lazily. Returns null when unavailable. */
|
|
27
|
+
function loadDriver() {
|
|
28
|
+
try {
|
|
29
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
30
|
+
const mod = require('react-native-sqlcipher');
|
|
31
|
+
return mod?.default ?? mod;
|
|
32
|
+
} catch {
|
|
33
|
+
return null;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
export class DatabaseManager {
|
|
37
|
+
db = null;
|
|
38
|
+
initPromise = null;
|
|
39
|
+
|
|
40
|
+
/** True once the encrypted database is open and migrated. */
|
|
41
|
+
get isReady() {
|
|
42
|
+
return this.db !== null;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* Opens (once) the encrypted database and applies migrations. Concurrent
|
|
47
|
+
* callers share a single in-flight open, so `init` is safe to call from
|
|
48
|
+
* multiple screens/hooks simultaneously.
|
|
49
|
+
*/
|
|
50
|
+
async init() {
|
|
51
|
+
if (this.db) return this.db;
|
|
52
|
+
if (this.initPromise) return this.initPromise;
|
|
53
|
+
this.initPromise = this.open().then(db => {
|
|
54
|
+
this.db = db;
|
|
55
|
+
return db;
|
|
56
|
+
}).catch(error => {
|
|
57
|
+
// Reset so a later attempt can retry from scratch.
|
|
58
|
+
this.initPromise = null;
|
|
59
|
+
throw error;
|
|
60
|
+
});
|
|
61
|
+
return this.initPromise;
|
|
62
|
+
}
|
|
63
|
+
async open() {
|
|
64
|
+
const SQLite = loadDriver();
|
|
65
|
+
if (!SQLite) {
|
|
66
|
+
throw new Error(`[DatabaseManager] 'react-native-sqlcipher' is not available on ` + `platform '${Platform.OS}'. Install the package and rebuild the ` + `native app to enable the encrypted media database.`);
|
|
67
|
+
}
|
|
68
|
+
SQLite.enablePromise(true);
|
|
69
|
+
const key = await getDatabaseKey();
|
|
70
|
+
const db = await SQLite.openDatabase({
|
|
71
|
+
name: DATABASE_NAME,
|
|
72
|
+
key,
|
|
73
|
+
location: DATABASE_LOCATION
|
|
74
|
+
});
|
|
75
|
+
|
|
76
|
+
// Pragmas: WAL for concurrent read/write throughput, FK enforcement on.
|
|
77
|
+
await db.executeSql('PRAGMA foreign_keys = ON;');
|
|
78
|
+
try {
|
|
79
|
+
await db.executeSql('PRAGMA journal_mode = WAL;');
|
|
80
|
+
} catch {
|
|
81
|
+
// WAL is an optimization; ignore if the platform rejects it.
|
|
82
|
+
}
|
|
83
|
+
await runMigrations(this.createMigrationExecutor(db));
|
|
84
|
+
return db;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
/** Ensures the DB is open and returns the live connection. */
|
|
88
|
+
async requireDb() {
|
|
89
|
+
return this.db ?? (await this.init());
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* Executes a write/DDL statement. Returns the raw result set for callers that
|
|
94
|
+
* need `insertId` / `rowsAffected`.
|
|
95
|
+
*/
|
|
96
|
+
async exec(sql, params = []) {
|
|
97
|
+
const db = await this.requireDb();
|
|
98
|
+
const [result] = await db.executeSql(sql, params);
|
|
99
|
+
return result;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
/** Executes a SELECT and returns the rows as an array of `T`. */
|
|
103
|
+
async query(sql, params = []) {
|
|
104
|
+
const db = await this.requireDb();
|
|
105
|
+
const [result] = await db.executeSql(sql, params);
|
|
106
|
+
const rows = [];
|
|
107
|
+
for (let i = 0; i < result.rows.length; i++) {
|
|
108
|
+
rows.push(result.rows.item(i));
|
|
109
|
+
}
|
|
110
|
+
return rows;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
/** Convenience: SELECT returning the first scalar column of the first row. */
|
|
114
|
+
async queryScalar(sql, params = []) {
|
|
115
|
+
const rows = await this.query(sql, params);
|
|
116
|
+
if (rows.length === 0) return null;
|
|
117
|
+
const first = rows[0];
|
|
118
|
+
const firstKey = Object.keys(first)[0];
|
|
119
|
+
return firstKey === undefined ? null : first[firstKey];
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
/**
|
|
123
|
+
* Runs a set of statements atomically in a single transaction.
|
|
124
|
+
*
|
|
125
|
+
* The `react-native-sqlcipher` driver requires every `executeSql` to be queued
|
|
126
|
+
* *synchronously* inside the transaction scope, so this takes a pre-built list
|
|
127
|
+
* of statements rather than an async callback — guaranteeing all-or-nothing
|
|
128
|
+
* semantics (used by `insertMany` and the migration runner).
|
|
129
|
+
*/
|
|
130
|
+
async batch(statements) {
|
|
131
|
+
if (statements.length === 0) return;
|
|
132
|
+
const db = await this.requireDb();
|
|
133
|
+
await db.transaction(tx => {
|
|
134
|
+
for (const {
|
|
135
|
+
sql,
|
|
136
|
+
params
|
|
137
|
+
} of statements) {
|
|
138
|
+
tx.executeSql(sql, params ?? []);
|
|
139
|
+
}
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
/** Adapts this manager to the migration executor contract. */
|
|
144
|
+
createMigrationExecutor(db) {
|
|
145
|
+
return {
|
|
146
|
+
getVersion: async () => {
|
|
147
|
+
const [result] = await db.executeSql('PRAGMA user_version;');
|
|
148
|
+
const row = result.rows.item(0);
|
|
149
|
+
return Number(row?.user_version ?? 0);
|
|
150
|
+
},
|
|
151
|
+
runBatch: async statements => {
|
|
152
|
+
await db.transaction(tx => {
|
|
153
|
+
for (const sql of statements) {
|
|
154
|
+
tx.executeSql(sql, []);
|
|
155
|
+
}
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
/** Closes the connection (e.g. on teardown). Safe to call when not open. */
|
|
162
|
+
async close() {
|
|
163
|
+
const db = this.db;
|
|
164
|
+
this.db = null;
|
|
165
|
+
this.initPromise = null;
|
|
166
|
+
if (db) {
|
|
167
|
+
try {
|
|
168
|
+
await db.close();
|
|
169
|
+
} catch (error) {
|
|
170
|
+
console.warn('[DatabaseManager] close failed', error);
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
// Process-wide singleton — every consumer shares one encrypted connection.
|
|
177
|
+
let managerInstance = null;
|
|
178
|
+
|
|
179
|
+
/** Returns the shared `DatabaseManager` singleton. */
|
|
180
|
+
export function getDatabaseManager() {
|
|
181
|
+
if (!managerInstance) {
|
|
182
|
+
managerInstance = new DatabaseManager();
|
|
183
|
+
}
|
|
184
|
+
return managerInstance;
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
/** Opens + migrates the encrypted database. Call once at app startup. */
|
|
188
|
+
export async function initializeMediaDatabase() {
|
|
189
|
+
await getDatabaseManager().init();
|
|
190
|
+
}
|
|
191
|
+
//# sourceMappingURL=DatabaseManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["Platform","getDatabaseKey","runMigrations","DATABASE_NAME","DATABASE_LOCATION","loadDriver","mod","require","default","DatabaseManager","db","initPromise","isReady","init","open","then","catch","error","SQLite","Error","OS","enablePromise","key","openDatabase","name","location","executeSql","createMigrationExecutor","requireDb","exec","sql","params","result","query","rows","i","length","push","item","queryScalar","first","firstKey","Object","keys","undefined","batch","statements","transaction","tx","getVersion","row","Number","user_version","runBatch","close","console","warn","managerInstance","getDatabaseManager","initializeMediaDatabase"],"sourceRoot":"..\\..\\..\\src","sources":["db/DatabaseManager.ts"],"mappings":"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","ignoreList":[]}
|