diff --git a/ios/Podfile.lock b/ios/Podfile.lock index c3e7879596d6..749f6bcb7372 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -881,7 +881,9 @@ PODS: - React-Core - react-native-blur (4.3.3): - React-Core - - react-native-cameraroll (5.10.0): + - react-native-cameraroll (7.5.2): + - glog + - RCT-Folly (= 2022.05.16.00) - React-Core - react-native-config (1.5.0): - react-native-config/App (= 1.5.0) @@ -1475,7 +1477,7 @@ SPEC CHECKSUMS: react-native-biometrics: 352e5a794bfffc46a0c86725ea7dc62deb085bdc react-native-blob-util: 600972b1782380a5a7d5db61a3817ea32349dae9 react-native-blur: c6d0a1dc2b4b519f7afe3b14d8151998632b6d18 - react-native-cameraroll: 4701ae7c3dbcd3f5e9e150ca17f250a276154b35 + react-native-cameraroll: af8eec1e585d053ff485d98ec837f9a8a11b5745 react-native-config: 5330c8258265c1e5fdb8c009d2cabd6badd96727 react-native-hole-view: 6935448993bac79f2b5a4ad7e9741094cf810679 react-native-image-resizer: 2f1577efa3bc762597681f530c8e8d05ce0ceeb3 diff --git a/package.json b/package.json index d9335df60527..d7b6aad40fa6 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,7 @@ }, "dependencies": { "@react-native-async-storage/async-storage": "1.19.3", - "@react-native-camera-roll/camera-roll": "5.10.0", + "@react-native-camera-roll/camera-roll": "7.5.2", "@react-native-clipboard/clipboard": "1.13.2", "@react-native-community/audio-toolkit": "git+https://github.com/tbenr/react-native-audio-toolkit.git#refs/tags/v2.0.3-status-v6", "@react-native-community/blur": "git+https://github.com/status-im/react-native-blur.git#refs/tags/v4.3.3-status", diff --git a/patches/CameraRoll.ts.patch b/patches/CameraRoll.ts.patch index 75fb80d96086..f2af11c17430 100644 --- a/patches/CameraRoll.ts.patch +++ b/patches/CameraRoll.ts.patch @@ -1,109 +1,6 @@ ---- /tmp/tmp-status-mobile-8a12ad351/tmp.SnIPZikasU/CameraRoll.ts 2024-04-16 12:22:28.722553000 +0200 -+++ ./node_modules/@react-native-camera-roll/camera-roll/src/CameraRoll.ts 2024-04-16 12:22:40.347610946 +0200 -@@ -24,32 +24,32 @@ - }; - - export type GroupTypes = -- | 'Album' -- | 'All' -- | 'Event' -- | 'Faces' -- | 'Library' -- | 'PhotoStream' -- | 'SavedPhotos'; -+ | 'Album' -+ | 'All' -+ | 'Event' -+ | 'Faces' -+ | 'Library' -+ | 'PhotoStream' -+ | 'SavedPhotos'; - - export type SubTypes = -- | 'PhotoPanorama' -- | 'PhotoHDR' -- | 'PhotoScreenshot' -- | 'PhotoLive' -- | 'PhotoDepthEffect' -- | 'VideoStreamed' -- | 'VideoHighFrameRate' -- | 'VideoTimelapse'; -+ | 'PhotoPanorama' -+ | 'PhotoHDR' -+ | 'PhotoScreenshot' -+ | 'PhotoLive' -+ | 'PhotoDepthEffect' -+ | 'VideoStreamed' -+ | 'VideoHighFrameRate' -+ | 'VideoTimelapse'; - - export type Include = -- | 'filename' -- | 'fileSize' -- | 'fileExtension' -- | 'location' -- | 'imageSize' -- | 'playableDuration' -- | 'orientation'; -+ | 'filename' -+ | 'fileSize' -+ | 'fileExtension' -+ | 'location' -+ | 'imageSize' -+ | 'playableDuration' -+ | 'orientation'; - - export type AssetType = 'All' | 'Videos' | 'Photos'; - -@@ -164,14 +164,14 @@ - }; - - export type AlbumSubType = -- | 'AlbumRegular' -- | 'AlbumSyncedEvent' -- | 'AlbumSyncedFaces' -- | 'AlbumSyncedAlbum' -- | 'AlbumImported' -- | 'AlbumMyPhotoStream' -- | 'AlbumCloudShared' -- | 'Unknown'; -+ | 'AlbumRegular' -+ | 'AlbumSyncedEvent' -+ | 'AlbumSyncedFaces' -+ | 'AlbumSyncedAlbum' -+ | 'AlbumImported' -+ | 'AlbumMyPhotoStream' -+ | 'AlbumCloudShared' -+ | 'Unknown'; - - export type Album = { - title: string; -@@ -180,18 +180,18 @@ - }; - - export type ThumbnailSize = { -- height: number, -- width: number -+ height: number; -+ width: number; - }; - - export type PhotoThumbnailOptions = { -- allowNetworkAccess: boolean, //iOS only -- targetSize: ThumbnailSize, -- quality: number -+ allowNetworkAccess: boolean; //iOS only -+ targetSize: ThumbnailSize; -+ quality: number; - }; - - export type PhotoThumbnail = { -- thumbnailBase64: string, -+ thumbnailBase64: string; - }; - - /** -@@ -213,12 +213,25 @@ +--- /tmp/tmp-status-mobile-3907e6b2e/tmp.re8kHerusA/CameraRoll.ts 2024-04-16 15:17:12.942432000 +0200 ++++ ./node_modules/@react-native-camera-roll/camera-roll/src/CameraRoll.ts 2024-04-16 15:17:42.455250986 +0200 +@@ -239,6 +239,19 @@ } /** @@ -120,69 +17,6 @@ + } + + /** - * Saves the photo or video to the camera roll or photo library. + * Saves the photo or video to the camera roll or photo library, and returns the URI of the newly created asset. * - */ - static save( -- tag: string, -- options: SaveToCameraRollOptions = {}, -+ tag: string, -+ options: SaveToCameraRollOptions = {}, - ): Promise { - let {type = 'auto'} = options; - const {album = ''} = options; -@@ -234,17 +247,17 @@ - } - - static saveToCameraRoll( -- tag: string, -- type?: 'photo' | 'video' | 'auto', -+ tag: string, -+ type?: 'photo' | 'video' | 'auto', - ): Promise { - console.warn( -- 'CameraRoll.saveToCameraRoll(tag, type) is deprecated. Use the save function instead', -+ 'CameraRoll.saveToCameraRoll(tag, type) is deprecated. Use the save function instead', - ); - return CameraRoll.save(tag, {type}); - } - - static getAlbums( -- params: GetAlbumsParams = {assetType: 'All'}, -+ params: GetAlbumsParams = {assetType: 'All'}, - ): Promise { - return RNCCameraRoll.getAlbums(params); - } -@@ -279,8 +292,8 @@ - * @returns Promise - */ - static iosGetImageDataById( -- internalID: string, -- convertHeicImages = false, -+ internalID: string, -+ convertHeicImages = false, - ): Promise { - const conversionOption: PhotoConvertionOptions = { - convertHeicImages: convertHeicImages, -@@ -288,14 +301,17 @@ - return RNCCameraRoll.getPhotoByInternalID(internalID, conversionOption); - } - -- /** -+ /** - * Returns a Promise with thumbnail photo. - * - * @param internalID - PH photo internal ID. - * @param options - thumbnail photo options. - * @returns Promise - */ -- static getPhotoThumbnail(internalID: string, options: PhotoThumbnailOptions): Promise { -- return RNCCameraRoll.getPhotoThumbnail(internalID, options); -- } -+ static getPhotoThumbnail( -+ internalID: string, -+ options: PhotoThumbnailOptions, -+ ): Promise { -+ return RNCCameraRoll.getPhotoThumbnail(internalID, options); -+ } - } + * @deprecated `save(...)` is deprecated - use `saveAsset(...)` instead. diff --git a/patches/NativeCameraRollModule.ts.patch b/patches/NativeCameraRollModule.ts.patch index 51c574206cc7..90c1126e8aa3 100644 --- a/patches/NativeCameraRollModule.ts.patch +++ b/patches/NativeCameraRollModule.ts.patch @@ -1,74 +1,11 @@ ---- /tmp/tmp-status-mobile-8a12ad351/tmp.v1Aju1hKVG/NativeCameraRollModule.ts 2024-04-16 12:14:39.262541000 +0200 -+++ ./node_modules/@react-native-camera-roll/camera-roll/src/NativeCameraRollModule.ts 2024-04-16 12:21:34.905876910 +0200 -@@ -2,17 +2,17 @@ - // we use Object type because methods on the native side use NSDictionary and ReadableMap - // and we want to stay compatible with those - import {TurboModuleRegistry, TurboModule} from 'react-native'; --import type { PhotoThumbnail } from './CameraRoll'; -+import type {PhotoThumbnail} from './CameraRoll'; - - export type AlbumSubType = -- | 'AlbumRegular' -- | 'AlbumSyncedEvent' -- | 'AlbumSyncedFaces' -- | 'AlbumSyncedAlbum' -- | 'AlbumImported' -- | 'AlbumMyPhotoStream' -- | 'AlbumCloudShared' -- | 'Unknown'; -+ | 'AlbumRegular' -+ | 'AlbumSyncedEvent' -+ | 'AlbumSyncedFaces' -+ | 'AlbumSyncedAlbum' -+ | 'AlbumImported' -+ | 'AlbumMyPhotoStream' -+ | 'AlbumCloudShared' -+ | 'Unknown'; - - type Album = { - title: string; -@@ -21,14 +21,14 @@ - }; - - type SubTypes = -- | 'PhotoPanorama' -- | 'PhotoHDR' -- | 'PhotoScreenshot' -- | 'PhotoLive' -- | 'PhotoDepthEffect' -- | 'VideoStreamed' -- | 'VideoHighFrameRate' -- | 'VideoTimelapse'; -+ | 'PhotoPanorama' -+ | 'PhotoHDR' -+ | 'PhotoScreenshot' -+ | 'PhotoLive' -+ | 'PhotoDepthEffect' -+ | 'VideoStreamed' -+ | 'VideoHighFrameRate' -+ | 'VideoTimelapse'; - - type PhotoIdentifier = { - node: { -@@ -73,14 +73,16 @@ +--- /tmp/tmp-status-mobile-3907e6b2e/tmp.juxTO1BeCM/NativeCameraRollModule.ts 2024-04-16 15:21:28.379979000 +0200 ++++ ./node_modules/@react-native-camera-roll/camera-roll/src/NativeCameraRollModule.ts 2024-04-16 15:21:40.490391291 +0200 +@@ -81,6 +81,8 @@ getPhotos(params: Object): Promise; getAlbums(params: Object): Promise; deletePhotos(photoUris: Array): Promise; + getPhotosCountiOS(arg: string): Promise; + getFavoritesiOS(arg: string): Promise; getPhotoByInternalID( -- internalID: string, -- options: Object, -+ internalID: string, -+ options: Object, - ): Promise; - getPhotoThumbnail( -- internalID: string, -- options: Object -- ): Promise -+ internalID: string, -+ options: Object, -+ ): Promise; - } - - export default TurboModuleRegistry.getEnforcing('RNCCameraRoll'); + internalID: string, + options: Object, diff --git a/patches/RNCCameraRoll.mm.patch b/patches/RNCCameraRoll.mm.patch index f4dccc0b9537..2951cbe64429 100644 --- a/patches/RNCCameraRoll.mm.patch +++ b/patches/RNCCameraRoll.mm.patch @@ -1,91 +1,7 @@ ---- /tmp/tmp-status-mobile-8a12ad351/tmp.1GxFrJZyJK/RNCCameraRoll.mm 2024-04-16 12:08:50.684272000 +0200 -+++ ./node_modules/@react-native-camera-roll/camera-roll/ios/RNCCameraRoll.mm 2024-04-16 12:09:28.792265816 +0200 -@@ -178,14 +178,14 @@ - if ([[inputURI.pathExtension lowercaseString] isEqualToString:@"webp"]) { - UIImage *webpImage; - -- #ifdef SD_WEB_IMAGE_WEBP_CODER_AVAILABLE -+ #ifdef SD_WEB_IMAGE_WEBP_CODER_AVAILABLE - webpImage = [[SDImageWebPCoder sharedCoder] decodedImageWithData:data options:nil]; - #else - if (@available(iOS 14, *)) { - webpImage = [UIImage imageWithData:data]; - } - #endif -- -+ - if (webpImage) { - data = UIImageJPEGRepresentation(webpImage, 1.0); - } -@@ -701,15 +701,15 @@ - checkPhotoLibraryConfig(); - - BOOL const allowNetworkAccess = options[@"allowNetworkAccess"] == nil ? NO : [RCTConvert BOOL:options[@"allowNetworkAccess"]]; -- -+ - NSDictionary *const targetSize = [RCTConvert NSDictionary:options[@"targetSize"]]; - CGFloat const targetHeight = targetSize[@"height"] == nil ? 400 : [RCTConvert CGFloat:targetSize[@"height"]]; - CGFloat const targetWidth = targetSize[@"width"] == nil ? 400 : [RCTConvert CGFloat:targetSize[@"width"]]; -- -+ - CGFloat quality = options[@"quality"] == nil ? 1.0 : [RCTConvert CGFloat:options[@"quality"]]; - - requestPhotoLibraryAccess(reject, ^(bool isLimited){ -- -+ - PHFetchResult *fetchResult; - PHAsset *asset; - NSString *mediaIdentifier = internalId; -@@ -729,7 +729,7 @@ - requestOptions.networkAccessAllowed = allowNetworkAccess; - requestOptions.version = PHImageRequestOptionsVersionUnadjusted; - requestOptions.deliveryMode = PHImageRequestOptionsDeliveryModeHighQualityFormat; -- -+ - CGSize const thumbnailSize = CGSizeMake(targetWidth, targetHeight); - [[PHImageManager defaultManager] requestImageForAsset:asset - targetSize:thumbnailSize -@@ -741,9 +741,9 @@ - if (error) { - reject(@"Error while getting thumbnail image",@"Error while getting thumbnail image",error); - } -- -+ - NSString *thumbnailBase64 = [UIImageJPEGRepresentation(image, quality) base64EncodedStringWithOptions:NSDataBase64EncodingEndLineWithLineFeed]; -- -+ - resolve(@{ - @"thumbnailBase64": thumbnailBase64 - }); -@@ -759,7 +759,7 @@ - - NSString *subTypeLabelForCollection(PHAssetCollection *assetCollection) { - PHAssetCollectionSubtype subtype = assetCollection.assetCollectionSubtype; -- -+ - switch (subtype) { - case PHAssetCollectionSubtypeAlbumRegular: - return @"AlbumRegular"; -@@ -774,7 +774,7 @@ - case PHAssetCollectionSubtypeAlbumMyPhotoStream: - return @"AlbumMyPhotoStream"; - case PHAssetCollectionSubtypeAlbumCloudShared: -- return @"AlbumCloudShared"; -+ return @"AlbumCloudShared"; - default: - return @"Unknown"; - } -@@ -783,7 +783,7 @@ - - (NSArray *) mediaSubTypeLabelsForAsset:(PHAsset *)asset { - PHAssetMediaSubtype subtype = asset.mediaSubtypes; - NSMutableArray *mediaSubTypeLabels = [NSMutableArray array]; -- -+ - if (subtype & PHAssetMediaSubtypePhotoPanorama) { - [mediaSubTypeLabels addObject:@"PhotoPanorama"]; - } -@@ -812,6 +812,53 @@ - return mediaSubTypeLabels; +--- /tmp/tmp-status-mobile-3907e6b2e/tmp.O0mkyjqnsy/RNCCameraRoll.mm 2024-04-16 15:26:23.070258000 +0200 ++++ ./node_modules/@react-native-camera-roll/camera-roll/ios/RNCCameraRoll.mm 2024-04-16 15:26:32.664996066 +0200 +@@ -955,6 +955,53 @@ + return [albumTitles copy]; } +RCT_EXPORT_METHOD(getPhotosCountiOS:(NSString *)blank diff --git a/yarn.lock b/yarn.lock index cca958952d7f..513d5fd61583 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2576,10 +2576,10 @@ dependencies: merge-options "^3.0.4" -"@react-native-camera-roll/camera-roll@5.10.0": - version "5.10.0" - resolved "https://registry.yarnpkg.com/@react-native-camera-roll/camera-roll/-/camera-roll-5.10.0.tgz#98cf5489be6805ac926b1c4d29ac956cf4df45dc" - integrity sha512-NZb/zU4S+k1Hx2Y3BdNufrfn8whNsiRjHNxeiGMak8OwDDJikqP5Ej7HXFv8sJSfTGfi1ddH0wdd541MHV/Nbw== +"@react-native-camera-roll/camera-roll@7.5.2": + version "7.5.2" + resolved "https://registry.yarnpkg.com/@react-native-camera-roll/camera-roll/-/camera-roll-7.5.2.tgz#2b248a835fbb8b53d04fc0c2957adba1474d9c99" + integrity sha512-XiVIrW17EFXrFzqB48q6cQOaYeVnw0iC3tH+Jhl+MAHDYGLJp+ulzxCNNwngaMvnVAA5Q2mUMzRocUiJPy8q0g== "@react-native-clipboard/clipboard@1.13.2": version "1.13.2"