From 07fef8f5e70991dad4d3f44eaf71b0dee2038851 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Th=C3=A9o=20Poizat?= Date: Fri, 1 Sep 2023 16:15:16 +0200 Subject: [PATCH] feat(iOS): Include subtype in get albums. (#526) --- README.md | 1 + ios/RNCCameraRoll.mm | 27 ++++++++++++++++++++++++++- src/CameraRoll.ts | 11 +++++++++++ src/NativeCameraRollModule.ts | 11 +++++++++++ 4 files changed, 49 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 4429fe9..5d99935 100644 --- a/README.md +++ b/README.md @@ -206,6 +206,7 @@ Returns a Promise with a list of albums Array of `Album` object * title: {string} * count: {number} + * subtype: {string | undefined} : See AlbumSubType type for possible values. iOS only. --- diff --git a/ios/RNCCameraRoll.mm b/ios/RNCCameraRoll.mm index 4b4d93d..d36ad7f 100644 --- a/ios/RNCCameraRoll.mm +++ b/ios/RNCCameraRoll.mm @@ -262,9 +262,11 @@ RCT_EXPORT_METHOD(getAlbums:(NSDictionary *)params // Enumerate assets within the collection PHFetchResult *const assetsFetchResult = [PHAsset fetchAssetsInAssetCollection:obj options:assetFetchOptions]; if (assetsFetchResult.count > 0) { + NSString *subtypeString = subTypeLabelForCollection(obj); [result addObject:@{ @"title": [obj localizedTitle], - @"count": @(assetsFetchResult.count) + @"count": @(assetsFetchResult.count), + @"subtype": subtypeString }]; } }]; @@ -685,6 +687,29 @@ RCT_EXPORT_METHOD(getPhotoByInternalID:(NSString *)internalId }, false); } +NSString *subTypeLabelForCollection(PHAssetCollection *assetCollection) { + PHAssetCollectionSubtype subtype = assetCollection.assetCollectionSubtype; + + switch (subtype) { + case PHAssetCollectionSubtypeAlbumRegular: + return @"AlbumRegular"; + case PHAssetCollectionSubtypeAlbumSyncedEvent: + return @"AlbumSyncedEvent"; + case PHAssetCollectionSubtypeAlbumSyncedFaces: + return @"AlbumSyncedFaces"; + case PHAssetCollectionSubtypeAlbumSyncedAlbum: + return @"AlbumSyncedAlbum"; + case PHAssetCollectionSubtypeAlbumImported: + return @"AlbumImported"; + case PHAssetCollectionSubtypeAlbumMyPhotoStream: + return @"AlbumMyPhotoStream"; + case PHAssetCollectionSubtypeAlbumCloudShared: + return @"AlbumCloudShared"; + default: + return @"Unknown"; + } +} + - (NSArray *) mediaSubTypeLabelsForAsset:(PHAsset *)asset { PHAssetMediaSubtype subtype = asset.mediaSubtypes; NSMutableArray *mediaSubTypeLabels = [NSMutableArray array]; diff --git a/src/CameraRoll.ts b/src/CameraRoll.ts index 871e84c..5589694 100644 --- a/src/CameraRoll.ts +++ b/src/CameraRoll.ts @@ -158,9 +158,20 @@ export type GetAlbumsParams = { assetType?: AssetType; }; +export type AlbumSubType = + | 'AlbumRegular' + | 'AlbumSyncedEvent' + | 'AlbumSyncedFaces' + | 'AlbumSyncedAlbum' + | 'AlbumImported' + | 'AlbumMyPhotoStream' + | 'AlbumCloudShared' + | 'Unknown'; + export type Album = { title: string; count: number; + subtype?: AlbumSubType; }; /** diff --git a/src/NativeCameraRollModule.ts b/src/NativeCameraRollModule.ts index c4f321f..c6d5e76 100644 --- a/src/NativeCameraRollModule.ts +++ b/src/NativeCameraRollModule.ts @@ -3,9 +3,20 @@ // and we want to stay compatible with those import {TurboModuleRegistry, TurboModule} from 'react-native'; +export type AlbumSubType = + | 'AlbumRegular' + | 'AlbumSyncedEvent' + | 'AlbumSyncedFaces' + | 'AlbumSyncedAlbum' + | 'AlbumImported' + | 'AlbumMyPhotoStream' + | 'AlbumCloudShared' + | 'Unknown'; + type Album = { title: string; count: number; + subtype?: AlbumSubType; }; type SubTypes =