diff --git a/apps/mobile/app/components/dialogs/attach-image-dialog/index.tsx b/apps/mobile/app/components/dialogs/attach-image-dialog/index.tsx
index 58ee9c38c..2a7c8afcc 100644
--- a/apps/mobile/app/components/dialogs/attach-image-dialog/index.tsx
+++ b/apps/mobile/app/components/dialogs/attach-image-dialog/index.tsx
@@ -17,7 +17,13 @@ You should have received a copy of the GNU General Public License
along with this program. If not, see .
*/
import React, { useState } from "react";
-import { Image, ScrollView, TouchableOpacity, View } from "react-native";
+import {
+ Image,
+ Platform,
+ ScrollView,
+ TouchableOpacity,
+ View
+} from "react-native";
import { Image as ImageType } from "react-native-image-crop-picker";
import { useThemeColors } from "../../../../../../packages/theme/dist";
import { presentSheet } from "../../../services/event-manager";
@@ -65,7 +71,7 @@ export default function AttachImage({
{
presentSheet({
@@ -265,6 +266,7 @@ const handleImageResponse = async (
response: Image[],
options: PickerOptions
) => {
+ console.log(response, "result-file-picker");
const result = await AttachImage.present(response, options.context);
if (!result) return;
const compress = result.compress;
@@ -300,7 +302,12 @@ const handleImageResponse = async (
type: "url"
});
- const fileName = image.filename || "image";
+ const fileName = image.sourceURL
+ ? basename(image.sourceURL)
+ : image.filename || "image";
+
+ console.log("attaching image...", fileName);
+
console.log("attaching file...");
if (!(await attachFile(uri, hash, image.mime, fileName, options))) return;
diff --git a/apps/mobile/patches/react-native-image-crop-picker+0.40.2.patch b/apps/mobile/patches/react-native-image-crop-picker+0.40.2.patch
new file mode 100644
index 000000000..e410f3010
--- /dev/null
+++ b/apps/mobile/patches/react-native-image-crop-picker+0.40.2.patch
@@ -0,0 +1,12 @@
+diff --git a/node_modules/react-native-image-crop-picker/android/src/main/java/com/reactnative/ivpusic/imagepicker/PickerModule.java b/node_modules/react-native-image-crop-picker/android/src/main/java/com/reactnative/ivpusic/imagepicker/PickerModule.java
+index 5de0845..1b158d8 100644
+--- a/node_modules/react-native-image-crop-picker/android/src/main/java/com/reactnative/ivpusic/imagepicker/PickerModule.java
++++ b/node_modules/react-native-image-crop-picker/android/src/main/java/com/reactnative/ivpusic/imagepicker/PickerModule.java
+@@ -692,6 +692,7 @@ class PickerModule extends ReactContextBaseJavaModule implements ActivityEventLi
+ image.putString("mime", options.outMimeType);
+ image.putInt("size", (int) new File(compressedImagePath).length());
+ image.putString("modificationDate", String.valueOf(modificationDate));
++ image.putString("sourceURL", path);
+
+ if (includeBase64) {
+ image.putString("data", getBase64StringFromFile(compressedImagePath));
diff --git a/apps/mobile/patches/react-native-image-picker+4.1.2.patch b/apps/mobile/patches/react-native-image-picker+4.1.2.patch
deleted file mode 100644
index a16bcee38..000000000
--- a/apps/mobile/patches/react-native-image-picker+4.1.2.patch
+++ /dev/null
@@ -1,169 +0,0 @@
-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..c87febe 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
-@@ -1,6 +1,7 @@
- package com.imagepicker;
-
- import android.Manifest;
-+import android.annotation.SuppressLint;
- import android.app.Activity;
- import android.content.ClipData;
- import android.content.ContentResolver;
-@@ -21,6 +22,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 +38,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;
-@@ -266,7 +269,9 @@ public class Utils {
- MediaMetadataRetriever m = new MediaMetadataRetriever();
- m.setDataSource(context, uri);
- int duration = Math.round(Float.parseFloat(m.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION))) / 1000;
-- m.release();
-+ try {
-+ m.release();
-+ } catch(Exception e) {}
- return duration;
- }
-
-@@ -383,7 +388,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 +423,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 +446,32 @@ 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.
-+ */
-+ @SuppressLint("Range")
-+ 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 @@ - (void) showPickerViewController:(UIViewController *)picker
- });
- }
-
-+-(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 @@ -(NSMutableDictionary *)mapImageToAsset:(UIImage *)image data:(NSData *)data {
- 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);