1// Copyright 2017-present 650 Industries. All rights reserved. 2 3#import <EXMediaLibrary/EXMediaLibraryMediaLibraryPermissionRequester.h> 4 5@implementation EXMediaLibraryMediaLibraryPermissionRequester 6 7+ (NSString *)permissionType 8{ 9 return @"mediaLibrary"; 10} 11 12#ifdef __IPHONE_14_0 13- (PHAccessLevel)accessLevel 14{ 15 return PHAccessLevelReadWrite; 16} 17#endif 18 19- (NSDictionary *)getPermissions 20{ 21 EXPermissionStatus status; 22 NSString *scope; 23 24 PHAuthorizationStatus permissions; 25#ifdef __IPHONE_14_0 26 if (@available(iOS 14, *)) { 27 permissions = [PHPhotoLibrary authorizationStatusForAccessLevel:[self accessLevel]]; 28 } else { 29 permissions = [PHPhotoLibrary authorizationStatus]; 30 } 31#else 32 permissions = [PHPhotoLibrary authorizationStatus]; 33#endif 34 35 switch (permissions) { 36 case PHAuthorizationStatusAuthorized: 37 status = EXPermissionStatusGranted; 38 scope = @"all"; 39 break; 40#ifdef __IPHONE_14_0 41 case PHAuthorizationStatusLimited: 42 status = EXPermissionStatusGranted; 43 scope = @"limited"; 44 break; 45#endif 46 case PHAuthorizationStatusDenied: 47 case PHAuthorizationStatusRestricted: 48 status = EXPermissionStatusDenied; 49 scope = @"none"; 50 break; 51 case PHAuthorizationStatusNotDetermined: 52 status = EXPermissionStatusUndetermined; 53 scope = @"none"; 54 break; 55 } 56 57 return @{ 58 @"status": @(status), 59 @"accessPrivileges": scope, 60 @"granted": @(status == EXPermissionStatusGranted) 61 }; 62} 63 64- (void)requestPermissionsWithResolver:(EXPromiseResolveBlock)resolve rejecter:(EXPromiseRejectBlock)reject 65{ 66 EX_WEAKIFY(self) 67 void(^handler)(PHAuthorizationStatus) = ^(PHAuthorizationStatus status) { 68 EX_STRONGIFY(self) 69 resolve([self getPermissions]); 70 }; 71 72#ifdef __IPHONE_14_0 73 if (@available(iOS 14, *)) { 74 [PHPhotoLibrary requestAuthorizationForAccessLevel:[self accessLevel] handler:handler]; 75 } else { 76 [PHPhotoLibrary requestAuthorization:handler]; 77 } 78#else 79 [PHPhotoLibrary requestAuthorization:handler]; 80#endif 81} 82 83@end 84