Files
Schnappix/node_modules/expo-media-library/ios/Requesters.swift
T

66 lines
1.8 KiB
Swift

import ExpoModulesCore
import Photos
public class MediaLibraryPermissionRequester: DefaultMediaLibraryPermissionRequester, EXPermissionsRequester {
public static func permissionType() -> String {
return "mediaLibrary"
}
}
public class MediaLibraryWriteOnlyPermissionRequester: DefaultMediaLibraryPermissionRequester, EXPermissionsRequester {
public static func permissionType() -> String {
return "mediaLibraryWriteOnly"
}
override internal func accessLevel() -> PHAccessLevel {
return PHAccessLevel.addOnly
}
}
public class DefaultMediaLibraryPermissionRequester: NSObject {}
extension DefaultMediaLibraryPermissionRequester {
@objc
public func requestPermissions(resolver resolve: @escaping EXPromiseResolveBlock, rejecter reject: EXPromiseRejectBlock) {
let authorizationHandler = { (_: PHAuthorizationStatus) in
resolve(self.getPermissions())
}
PHPhotoLibrary.requestAuthorization(for: self.accessLevel(), handler: authorizationHandler)
}
@objc
public func getPermissions() -> [AnyHashable: Any] {
let authorizationStatus = PHPhotoLibrary.authorizationStatus(for: self.accessLevel())
var status: EXPermissionStatus
var scope: String
switch authorizationStatus {
case .authorized:
status = EXPermissionStatusGranted
scope = "all"
case .limited:
status = EXPermissionStatusGranted
scope = "limited"
case .denied, .restricted:
status = EXPermissionStatusDenied
scope = "none"
case .notDetermined:
fallthrough
@unknown default:
status = EXPermissionStatusUndetermined
scope = "none"
}
return [
"status": status.rawValue,
"accessPrivileges": scope,
"granted": status == EXPermissionStatusGranted
]
}
@objc
internal func accessLevel() -> PHAccessLevel {
return PHAccessLevel.readWrite
}
}