From b112af577de8f95c0d494419f7a8ccb1a18461aa Mon Sep 17 00:00:00 2001 From: Vojtech Novak Date: Tue, 16 May 2023 00:23:11 +0200 Subject: [PATCH] fix(ios): file copy error handling --- ios/RNDocumentPicker.mm | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/ios/RNDocumentPicker.mm b/ios/RNDocumentPicker.mm index 22ab0446..8cf6d55f 100644 --- a/ios/RNDocumentPicker.mm +++ b/ios/RNDocumentPicker.mm @@ -124,10 +124,10 @@ - (NSMutableDictionary *)getMetadataForUrl:(NSURL *)url error:(NSError **)error result[FIELD_URI] = ((mode == UIDocumentPickerModeOpen) ? url : newURL).absoluteString; NSError *copyError; - NSString *maybeFileCopyPath = copyDestination ? [RNDocumentPicker copyToUniqueDestinationFrom:newURL usingDestinationPreset:copyDestination error:copyError].absoluteString : nil; + NSURL *maybeFileCopyPath = copyDestination ? [RNDocumentPicker copyToUniqueDestinationFrom:newURL usingDestinationPreset:copyDestination error:©Error] : nil; if (!copyError) { - result[FIELD_FILE_COPY_URI] = RCTNullIfNil(maybeFileCopyPath); + result[FIELD_FILE_COPY_URI] = RCTNullIfNil(maybeFileCopyPath.absoluteString); } else { result[FIELD_COPY_ERR] = copyError.localizedDescription; result[FIELD_FILE_COPY_URI] = [NSNull null]; @@ -193,7 +193,7 @@ - (void)pickDirectory:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBl reject(@"RNDocumentPicker:pickDirectory", @"pickDirectory is not supported on iOS", nil); } -+ (NSURL *)copyToUniqueDestinationFrom:(NSURL *)url usingDestinationPreset:(NSString *)copyToDirectory error:(NSError *)error ++ (NSURL *)copyToUniqueDestinationFrom:(NSURL *)url usingDestinationPreset:(NSString *)copyToDirectory error:(NSError **)error { NSURL *destinationRootDir = [self getDirectoryForFileCopy:copyToDirectory]; // we don't want to rename the file so we put it into a unique location @@ -201,13 +201,13 @@ + (NSURL *)copyToUniqueDestinationFrom:(NSURL *)url usingDestinationPreset:(NSSt NSURL *destinationDir = [destinationRootDir URLByAppendingPathComponent:[NSString stringWithFormat:@"%@/", uniqueSubDirName]]; NSURL *destinationUrl = [destinationDir URLByAppendingPathComponent:[NSString stringWithFormat:@"%@", url.lastPathComponent]]; - [NSFileManager.defaultManager createDirectoryAtURL:destinationDir withIntermediateDirectories:YES attributes:nil error:&error]; - if (error) { - return url; + [NSFileManager.defaultManager createDirectoryAtURL:destinationDir withIntermediateDirectories:YES attributes:nil error:error]; + if (*error) { + return nil; } - [NSFileManager.defaultManager copyItemAtURL:url toURL:destinationUrl error:&error]; - if (error) { - return url; + [NSFileManager.defaultManager copyItemAtURL:url toURL:destinationUrl error:error]; + if (*error) { + return nil; } else { return destinationUrl; }