From 00289eca09d8815df6d3fc83bfba2ff15c73c1d7 Mon Sep 17 00:00:00 2001 From: Edgar Aroutiounian Date: Wed, 29 Nov 2017 12:07:49 -0800 Subject: [PATCH] Implement deletion of asset-library files Summary: WIP: Starting point insofar as I'm not sure if there should be an Android equivalent. My application needs me to delete photos from the photos in iOS. I have tested this in my application and it works, have a screenshot from iOS asking as well and it does successfully delete the photos from the global Photos app. Related to https://github.com/facebook/react-native/issues/15253, it kind of continues using the deprecated assets-library framework, but that does need (and will be an bigger and bigger issue coming up) of assets-library URLs being used. I also assume RN prefers error handling at the JS level? Are the URLs starting with `asset-library`, etc. Closes https://github.com/facebook/react-native/pull/15481 Differential Revision: D6438016 Pulled By: hramos fbshipit-source-id: 47512140f62f458c14ad2ade2b358846e168c964 --- Libraries/CameraRoll/CameraRoll.js | 4 ++++ Libraries/CameraRoll/RCTCameraRollManager.m | 22 +++++++++++++++++++++ 2 files changed, 26 insertions(+) diff --git a/Libraries/CameraRoll/CameraRoll.js b/Libraries/CameraRoll/CameraRoll.js index 596aec7e3b2f4b..eccad7d5265a92 100644 --- a/Libraries/CameraRoll/CameraRoll.js +++ b/Libraries/CameraRoll/CameraRoll.js @@ -133,6 +133,10 @@ class CameraRoll { return this.saveToCameraRoll(tag, 'photo'); } + static deletePhotos(photos: Array) { + return RCTCameraRollManager.deletePhotos(photos); + } + /** * Saves the photo or video to the camera roll / gallery. * diff --git a/Libraries/CameraRoll/RCTCameraRollManager.m b/Libraries/CameraRoll/RCTCameraRollManager.m index 64cf734b1ac3cd..4b6a78bde2c21b 100644 --- a/Libraries/CameraRoll/RCTCameraRollManager.m +++ b/Libraries/CameraRoll/RCTCameraRollManager.m @@ -12,6 +12,7 @@ #import #import #import +#import #import #import @@ -234,6 +235,27 @@ static void RCTResolvePromise(RCTPromiseResolveBlock resolve, }]; } +RCT_EXPORT_METHOD(deletePhotos:(NSArray*)assets + resolve:(RCTPromiseResolveBlock)resolve + reject:(RCTPromiseRejectBlock)reject) +{ + NSArray *assets_ = [RCTConvert NSURLArray:assets]; + [[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{ + PHFetchResult *fetched = + [PHAsset fetchAssetsWithALAssetURLs:assets_ options:nil]; + [PHAssetChangeRequest deleteAssets:fetched]; + } + completionHandler:^(BOOL success, NSError *error) { + if (success == YES) { + resolve(@(success)); + } + else { + reject(@"Couldn't delete", @"Couldn't delete assets", error); + } + } + ]; +} + static void checkPhotoLibraryConfig() { #if RCT_DEV