Files
notesnook/apps/mobile/patches/react-native-image-picker+4.1.2.patch
2022-07-03 11:35:05 +05:00

150 lines
5.6 KiB
Diff

diff --git a/node_modules/react-native-image-picker/android/src/main/java/com/imagepicker/Utils.java b/node_modules/react-native-image-picker/android/src/main/java/com/imagepicker/Utils.java
index 8e59033..2a2bf3b 100644
--- a/node_modules/react-native-image-picker/android/src/main/java/com/imagepicker/Utils.java
+++ b/node_modules/react-native-image-picker/android/src/main/java/com/imagepicker/Utils.java
@@ -21,6 +21,7 @@ import android.provider.OpenableColumns;
import android.util.Base64;
import android.webkit.MimeTypeMap;
+import androidx.annotation.NonNull;
import androidx.core.app.ActivityCompat;
import androidx.core.content.FileProvider;
import androidx.exifinterface.media.ExifInterface;
@@ -36,6 +37,7 @@ import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
+import java.net.URI;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
@@ -383,7 +385,7 @@ public class Utils {
return fileUris;
}
- static ReadableMap getImageResponseMap(Uri uri, Options options, Context context) {
+ static WritableMap getImageResponseMap(Uri uri, Options options, Context context) {
String fileName = uri.getLastPathSegment();
int[] dimensions = getImageDimensions(uri, context);
@@ -418,13 +420,16 @@ public class Utils {
for(int i = 0; i < fileUris.size(); ++i) {
Uri uri = fileUris.get(i);
+ String fileName = getNameFromURI(context,uri);
if (isImageType(uri, context)) {
if (uri.getScheme().contains("content")) {
uri = getAppSpecificStorageUri(uri, context);
}
uri = resizeImage(uri, context, options);
- assets.pushMap(getImageResponseMap(uri, options, context));
+ WritableMap resMap = getImageResponseMap(uri, options, context);
+ resMap.putString("originalFileName",fileName);
+ assets.pushMap(resMap);
} else if (isVideoType(uri, context)) {
assets.pushMap(getVideoResponseMap(uri, context));
} else {
@@ -438,6 +443,31 @@ public class Utils {
return response;
}
+ /**
+ * Return file name from Uri given.
+ * @param context the context, cannot be null.
+ * @param uri uri request for file name, cannot be null
+ * @return the corresponding display name for file defined in uri or null if error occurs.
+ */
+ static String getNameFromURI(@NonNull Context context, @NonNull Uri uri) {
+ String result = null;
+ Cursor c = null;
+ try {
+ c = context.getContentResolver().query(uri, null, null, null, null);
+ c.moveToFirst();
+ result = c.getString(c.getColumnIndex(OpenableColumns.DISPLAY_NAME));
+ }
+ catch (Exception e){
+ // error occurs
+ }
+ finally {
+ if(c != null){
+ c.close();
+ }
+ }
+ return result;
+ }
+
static ReadableMap getErrorMap(String errCode, String errMsg) {
WritableMap map = Arguments.createMap();
map.putString("errorCode", errCode);
diff --git a/node_modules/react-native-image-picker/ios/ImagePickerManager.m b/node_modules/react-native-image-picker/ios/ImagePickerManager.m
index b634ffb..18b8950 100644
--- a/node_modules/react-native-image-picker/ios/ImagePickerManager.m
+++ b/node_modules/react-native-image-picker/ios/ImagePickerManager.m
@@ -96,6 +96,39 @@ RCT_EXPORT_METHOD(launchImageLibrary:(NSDictionary *)options callback:(RCTRespon
});
}
+-(NSString *)cachesDirectoryName
+{
+ static NSString *cachePath = nil;
+ if(!cachePath) {
+ NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
+ cachePath = [paths objectAtIndex:0];
+ }
+
+ return cachePath;
+}
+
+///
+/// Builds paths for identifiers in the cache directory
+///
+-(NSString *)pathForName:(NSString *)name
+{
+ NSString *cachePath = [self cachesDirectoryName];
+ NSString *path = [cachePath stringByAppendingPathComponent:name];
+ return path;
+}
+
+#pragma mark - NSData Cache methods
+
+///
+/// Saves the given data to the cache directory
+///
+-(NSString *)saveToCacheDirectory:(NSData *)data withName:(NSString *)name
+{
+ NSString *path = [self pathForName:name];
+ [data writeToFile:path atomically:YES];
+ return path;
+}
+
#pragma mark - Helpers
-(NSMutableDictionary *)mapImageToAsset:(UIImage *)image data:(NSData *)data {
@@ -121,22 +154,14 @@ RCT_EXPORT_METHOD(launchImageLibrary:(NSDictionary *)options callback:(RCTRespon
asset[@"type"] = [@"image/" stringByAppendingString:fileType];
NSString *fileName = [self getImageFileName:fileType];
- NSString *path = [[NSTemporaryDirectory() stringByStandardizingPath] stringByAppendingPathComponent:fileName];
- [data writeToFile:path atomically:YES];
+ NSString *path = [self saveToCacheDirectory:data withName:fileName];
if ([self.options[@"includeBase64"] boolValue]) {
asset[@"base64"] = [data base64EncodedStringWithOptions:0];
}
- NSURL *fileURL = [NSURL fileURLWithPath:path];
- asset[@"uri"] = [fileURL absoluteString];
-
- NSNumber *fileSizeValue = nil;
- NSError *fileSizeError = nil;
- [fileURL getResourceValue:&fileSizeValue forKey:NSURLFileSizeKey error:&fileSizeError];
- if (fileSizeValue){
- asset[@"fileSize"] = fileSizeValue;
- }
+ asset[@"uri"] = path;
+ asset[@"fileSize"] = [NSNumber numberWithInteger:[data length]];
asset[@"fileName"] = fileName;
asset[@"width"] = @(image.size.width);