From 080be72416356c9b029b5fec4dc17f524c037ed3 Mon Sep 17 00:00:00 2001 From: Olof Dahlbom Date: Sat, 8 Apr 2017 23:52:29 +0200 Subject: [PATCH] Added quality settings for video export. --- .../camera-roll-picker.js | 5 +- ios/RNPhotosFramework/RNPFManager.m | 53 ++++++++++++++++--- 2 files changed, 50 insertions(+), 8 deletions(-) diff --git a/example/react-native-camera-roll-picker/camera-roll-picker.js b/example/react-native-camera-roll-picker/camera-roll-picker.js index 4ccdf26..cc72853 100644 --- a/example/react-native-camera-roll-picker/camera-roll-picker.js +++ b/example/react-native-camera-roll-picker/camera-roll-picker.js @@ -107,9 +107,10 @@ class CameraRollPicker extends Component { console.log(RNFetchBlob.fs.dirs); const dirs = RNFetchBlob.fs.dirs - data.assets[0].saveAssetToDisk({ + data.assets[4].saveAssetToDisk({ dir: RNFetchBlob.fs.dirs.DocumentDir, - fileName : "olof.jpg" + deliveryMode : 'mediumQuality', + version : 'current' }).then((uri) => { console.log('finnished'); RNFetchBlob.fs.exists(uri) diff --git a/ios/RNPhotosFramework/RNPFManager.m b/ios/RNPhotosFramework/RNPFManager.m index c2b064a..71dcaca 100644 --- a/ios/RNPhotosFramework/RNPFManager.m +++ b/ios/RNPhotosFramework/RNPFManager.m @@ -376,12 +376,8 @@ - (dispatch_queue_t)methodQueue PHAsset* asset = [PHAssetsService getAssetsFromArrayOfLocalIdentifiers:@[[RCTConvert NSString:params[@"localIdentifier"]]]].firstObject; - PHVideoRequestOptions *options = [PHVideoRequestOptions new]; - options.version = PHVideoRequestOptionsVersionOriginal; - options.networkAccessAllowed = YES; - [[PHImageManager defaultManager] requestAVAssetForVideo:asset - options:options + options:[self getVideoRequestOptionsFromParams:params] resultHandler: ^(AVAsset * _Nullable avasset, AVAudioMix * _Nullable audioMix, @@ -395,7 +391,7 @@ - (dispatch_queue_t)methodQueue NSString *fullFileName = [path stringByAppendingPathComponent:[self getFileNameFromParamsObj:params]]; NSURL *fileURL = [NSURL fileURLWithPath:fullFileName]; - if ([[NSFileManager defaultManager] isDeletableFileAtPath:fullFileName]) { + if ([[NSFileManager defaultManager] fileExistsAtPath:fullFileName] && [[NSFileManager defaultManager] isDeletableFileAtPath:fullFileName]) { BOOL success = [[NSFileManager defaultManager] removeItemAtPath:fullFileName error:&error]; if (!success) { NSLog(@"Error removing file at path: %@", error.localizedDescription); @@ -414,7 +410,41 @@ - (dispatch_queue_t)methodQueue }]; } +} + +-(PHVideoRequestOptions *)getVideoRequestOptionsFromParams:(NSDictionary *)params { + PHVideoRequestOptions *videoRequestOptions = [PHVideoRequestOptions new]; + videoRequestOptions.networkAccessAllowed = YES; + + NSString *deliveryModeQuery = [RCTConvert NSString:params[@"deliveryMode"]]; + NSString *versionQuery = [RCTConvert NSString:params[@"version"]]; + + PHVideoRequestOptionsVersion version = PHVideoRequestOptionsVersionOriginal; + + if(versionQuery) { + if([versionQuery isEqualToString:@"current"]) { + version = PHVideoRequestOptionsVersionCurrent; + } + } + + PHVideoRequestOptionsDeliveryMode deliveryMode = PHVideoRequestOptionsDeliveryModeAutomatic; + if(deliveryModeQuery != nil) { + if([deliveryModeQuery isEqualToString:@"mediumQuality"]) { + deliveryMode = PHVideoRequestOptionsDeliveryModeMediumQualityFormat; + } + else if([deliveryModeQuery isEqualToString:@"highQuality"]) { + deliveryMode = PHVideoRequestOptionsDeliveryModeHighQualityFormat; + } + else if([deliveryModeQuery isEqualToString:@"fast"]) { + deliveryMode = PHVideoRequestOptionsDeliveryModeFastFormat; + } + } + videoRequestOptions.deliveryMode = deliveryMode; + videoRequestOptions.version = version; + + + return videoRequestOptions; } -(NSString *)getFileNameFromParamsObj:(NSDictionary *)params { @@ -674,4 +704,15 @@ -(void)saveVideoAtURL:(NSURL *)url toAlbum:(NSString *)albumLocalIdentifier andC }]; } +- (NSString *)valueForKey:(NSString *)key + fromQueryItems:(NSArray *)queryItems +{ + NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name=%@", key]; + NSURLQueryItem *queryItem = [[queryItems + filteredArrayUsingPredicate:predicate] + firstObject]; + return queryItem.value; +} + + @end