react-native-blob-util 0.17.1 → 0.17.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/android/build.gradle +5 -1
- package/android/src/main/java/com/ReactNativeBlobUtil/ReactNativeBlobUtilFS.java +20 -1
- package/android/src/main/java/com/ReactNativeBlobUtil/ReactNativeBlobUtilReq.java +2 -2
- package/class/ReactNativeBlobUtilCanceledFetchError.js +10 -0
- package/codegenSpecs/NativeBlobUtils.js +8 -0
- package/fetch.js +2 -1
- package/index.d.ts +2 -0
- package/index.js +3 -1
- package/ios/ReactNativeBlobUtil/ReactNativeBlobUtil.mm +11 -4
- package/ios/ReactNativeBlobUtilFS.mm +2 -2
- package/package.json +1 -1
- package/polyfill/Fetch.js +4 -1
package/android/build.gradle
CHANGED
|
@@ -59,6 +59,10 @@ android {
|
|
|
59
59
|
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
|
|
60
60
|
}
|
|
61
61
|
}
|
|
62
|
+
compileOptions {
|
|
63
|
+
sourceCompatibility JavaVersion.VERSION_1_8
|
|
64
|
+
targetCompatibility JavaVersion.VERSION_1_8
|
|
65
|
+
}
|
|
62
66
|
lintOptions {
|
|
63
67
|
abortOnError false
|
|
64
68
|
}
|
|
@@ -157,4 +161,4 @@ afterEvaluate { project ->
|
|
|
157
161
|
}
|
|
158
162
|
}
|
|
159
163
|
}
|
|
160
|
-
}
|
|
164
|
+
}
|
|
@@ -355,7 +355,11 @@ class ReactNativeBlobUtilFS {
|
|
|
355
355
|
} else {
|
|
356
356
|
res.put("SDCardApplicationDir", "");
|
|
357
357
|
}
|
|
358
|
+
} else {
|
|
359
|
+
res.put("SDCardDir", "");
|
|
360
|
+
res.put("SDCardApplicationDir", "");
|
|
358
361
|
}
|
|
362
|
+
|
|
359
363
|
res.put("MainBundleDir", ctx.getApplicationInfo().dataDir);
|
|
360
364
|
|
|
361
365
|
// TODO Change me with the correct path
|
|
@@ -376,7 +380,20 @@ class ReactNativeBlobUtilFS {
|
|
|
376
380
|
static Map<String, Object> getLegacySystemfolders(ReactApplicationContext ctx) {
|
|
377
381
|
Map<String, Object> res = new HashMap<>();
|
|
378
382
|
|
|
379
|
-
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q)
|
|
383
|
+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
|
|
384
|
+
res = ReactNativeBlobUtilFS.getSystemfolders(ctx);
|
|
385
|
+
|
|
386
|
+
// Include legacy folders anyway, since on the new arch compatibility between the spec and the turbomodule is enforced
|
|
387
|
+
res.put("LegacyDCIMDir", "");
|
|
388
|
+
res.put("LegacyPictureDir", "");
|
|
389
|
+
res.put("LegacyMusicDir", "");
|
|
390
|
+
res.put("LegacyDownloadDir", "");
|
|
391
|
+
res.put("LegacyMovieDir", "");
|
|
392
|
+
res.put("LegacyRingtoneDir", "");
|
|
393
|
+
res.put("LegacySDCardDir", "");
|
|
394
|
+
|
|
395
|
+
return res;
|
|
396
|
+
}
|
|
380
397
|
|
|
381
398
|
res.put("LegacyDCIMDir", Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM).getAbsolutePath());
|
|
382
399
|
res.put("LegacyPictureDir", Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).getAbsolutePath());
|
|
@@ -388,6 +405,8 @@ class ReactNativeBlobUtilFS {
|
|
|
388
405
|
String state = Environment.getExternalStorageState();
|
|
389
406
|
if (state.equals(Environment.MEDIA_MOUNTED)) {
|
|
390
407
|
res.put("LegacySDCardDir", Environment.getExternalStorageDirectory().getAbsolutePath());
|
|
408
|
+
} else {
|
|
409
|
+
res.put("LegacySDCardDir", "");
|
|
391
410
|
}
|
|
392
411
|
|
|
393
412
|
return res;
|
|
@@ -155,8 +155,8 @@ public class ReactNativeBlobUtilReq extends BroadcastReceiver implements Runnabl
|
|
|
155
155
|
}
|
|
156
156
|
|
|
157
157
|
public static void cancelTask(String taskId) {
|
|
158
|
-
|
|
159
|
-
|
|
158
|
+
Call call = taskTable.get(taskId);
|
|
159
|
+
if (call != null) {
|
|
160
160
|
call.cancel();
|
|
161
161
|
taskTable.remove(taskId);
|
|
162
162
|
}
|
|
@@ -18,6 +18,14 @@ export interface Spec extends TurboModule {
|
|
|
18
18
|
SDCardDir: string,
|
|
19
19
|
SDCardApplicationDir: string,
|
|
20
20
|
DCIMDir: string,
|
|
21
|
+
// Android Only Legacy Constants
|
|
22
|
+
LegacyDCIMDir: string,
|
|
23
|
+
LegacyPictureDir: string,
|
|
24
|
+
LegacyMusicDir: string,
|
|
25
|
+
LegacyDownloadDir: string,
|
|
26
|
+
LegacyMovieDir: string,
|
|
27
|
+
LegacyRingtoneDir: string,
|
|
28
|
+
LegacySDCardDir: string,
|
|
21
29
|
|};
|
|
22
30
|
|
|
23
31
|
+fetchBlobForm: (options: Object, taskId: string, method: string, url: string, headers: Object, form: Array<any>, callback: (value: Array<any>) => void) => void;
|
package/fetch.js
CHANGED
|
@@ -4,6 +4,7 @@ import fs from "./fs";
|
|
|
4
4
|
import getUUID from "./utils/uuid";
|
|
5
5
|
import {DeviceEventEmitter} from "react-native";
|
|
6
6
|
import {FetchBlobResponse} from "./class/ReactNativeBlobUtilBlobResponse";
|
|
7
|
+
import CanceledFetchError from "./class/ReactNativeBlobUtilCanceledFetchError";
|
|
7
8
|
import ReactNativeBlobUtil from "./codegenSpecs/NativeBlobUtils";
|
|
8
9
|
|
|
9
10
|
const emitter = DeviceEventEmitter;
|
|
@@ -328,7 +329,7 @@ export function fetch(...args: any): Promise {
|
|
|
328
329
|
subscriptionUpload.remove();
|
|
329
330
|
stateEvent.remove();
|
|
330
331
|
ReactNativeBlobUtil.cancelRequest(taskId, fn);
|
|
331
|
-
promiseReject(new
|
|
332
|
+
promiseReject(new CanceledFetchError("canceled"));
|
|
332
333
|
};
|
|
333
334
|
promise.taskId = taskId;
|
|
334
335
|
|
package/index.d.ts
CHANGED
|
@@ -7,6 +7,7 @@ export const ReactNativeBlobUtil: ReactNativeBlobUtilStatic;
|
|
|
7
7
|
export type ReactNativeBlobUtil = ReactNativeBlobUtilStatic;
|
|
8
8
|
export default ReactNativeBlobUtil;
|
|
9
9
|
import {filedescriptor} from './types';
|
|
10
|
+
import CanceledFetchError from './class/ReactNativeBlobUtilCanceledFetchError'
|
|
10
11
|
|
|
11
12
|
interface ReactNativeBlobUtilStatic {
|
|
12
13
|
fetch(method: Methods, url: string, headers?: { [key: string]: string }, body?: any
|
|
@@ -29,6 +30,7 @@ interface ReactNativeBlobUtilStatic {
|
|
|
29
30
|
polyfill: Polyfill;
|
|
30
31
|
// this require external module https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/oboe
|
|
31
32
|
JSONStream: any;
|
|
33
|
+
CanceledFetchError: CanceledFetchError
|
|
32
34
|
}
|
|
33
35
|
|
|
34
36
|
export interface Polyfill {
|
package/index.js
CHANGED
|
@@ -15,6 +15,7 @@ import ios from './ios';
|
|
|
15
15
|
import JSONStream from './json-stream';
|
|
16
16
|
import {config, fetch} from './fetch';
|
|
17
17
|
import URIUtil from "./utils/uri";
|
|
18
|
+
import CanceledFetchError from "./class/ReactNativeBlobUtilCanceledFetchError";
|
|
18
19
|
|
|
19
20
|
const {
|
|
20
21
|
ReactNativeBlobUtilSession,
|
|
@@ -70,5 +71,6 @@ export default {
|
|
|
70
71
|
wrap,
|
|
71
72
|
polyfill,
|
|
72
73
|
JSONStream,
|
|
73
|
-
MediaCollection
|
|
74
|
+
MediaCollection,
|
|
75
|
+
CanceledFetchError
|
|
74
76
|
};
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
#import "ReactNativeBlobUtilProgress.h"
|
|
13
13
|
|
|
14
14
|
#if RCT_NEW_ARCH_ENABLED
|
|
15
|
-
#import
|
|
15
|
+
#import <ReactNativeBlobUtilSpec/ReactNativeBlobUtilSpec.h>
|
|
16
16
|
#endif
|
|
17
17
|
|
|
18
18
|
__strong RCTEventDispatcher * eventDispatcherRef;
|
|
@@ -95,6 +95,14 @@ RCT_EXPORT_MODULE();
|
|
|
95
95
|
@"SDCardDir": @"",
|
|
96
96
|
@"SDCardApplicationDir": @"",
|
|
97
97
|
@"DCIMDir": @"",
|
|
98
|
+
// Android only legacy constants
|
|
99
|
+
@"LegacyDCIMDir": @"",
|
|
100
|
+
@"LegacyPictureDir": @"",
|
|
101
|
+
@"LegacyMusicDir": @"",
|
|
102
|
+
@"LegacyDownloadDir": @"",
|
|
103
|
+
@"LegacyMovieDir": @"",
|
|
104
|
+
@"LegacyRingtoneDir": @"",
|
|
105
|
+
@"LegacySDCardDir": @"",
|
|
98
106
|
};
|
|
99
107
|
}
|
|
100
108
|
|
|
@@ -677,7 +685,7 @@ RCT_EXPORT_METHOD(hash:(NSString *)path
|
|
|
677
685
|
}
|
|
678
686
|
|
|
679
687
|
#pragma mark - fs.readStream
|
|
680
|
-
RCT_EXPORT_METHOD(readStream:(NSString *)path
|
|
688
|
+
RCT_EXPORT_METHOD(readStream:(NSString *)path encoding:(NSString *)encoding bufferSize:(int)bufferSize tick:(int)tick streamId:(NSString *)streamId)
|
|
681
689
|
{
|
|
682
690
|
if(bufferSize == 0) {
|
|
683
691
|
if([[encoding lowercaseString] isEqualToString:@"base64"])
|
|
@@ -902,7 +910,7 @@ RCT_EXPORT_METHOD(emitExpiredEvent:(RCTResponseSenderBlock)callback)
|
|
|
902
910
|
}
|
|
903
911
|
- (void)copyToMediaStore:(NSDictionary *)filedata
|
|
904
912
|
mt:(NSString *) mt
|
|
905
|
-
path:(NSString *)
|
|
913
|
+
path:(NSString *) path
|
|
906
914
|
resolve:(RCTPromiseResolveBlock)resolve
|
|
907
915
|
reject:(RCTPromiseRejectBlock)reject
|
|
908
916
|
{
|
|
@@ -955,7 +963,6 @@ RCT_EXPORT_METHOD(emitExpiredEvent:(RCTResponseSenderBlock)callback)
|
|
|
955
963
|
reject(@"ENOT_SUPPORTED", @"This method is not supported on iOS", nil);
|
|
956
964
|
}
|
|
957
965
|
|
|
958
|
-
|
|
959
966
|
# pragma mark - New Architecture
|
|
960
967
|
#if RCT_NEW_ARCH_ENABLED
|
|
961
968
|
- (std::shared_ptr<facebook::react::TurboModule>)getTurboModule:
|
|
@@ -411,9 +411,9 @@ NSMutableDictionary *fileStreams = nil;
|
|
|
411
411
|
[fileHandle closeFile];
|
|
412
412
|
}
|
|
413
413
|
else {
|
|
414
|
-
if (![content writeToFile:path
|
|
414
|
+
if (![content writeToFile:path options:NSDataWritingAtomic error:&err]) {
|
|
415
415
|
fm = nil;
|
|
416
|
-
return reject(@"EUNSPECIFIED", [NSString stringWithFormat:@"File '%@' could not be written
|
|
416
|
+
return reject(@"EUNSPECIFIED", [NSString stringWithFormat:@"File '%@' could not be written; error: %@", path, [err description]], err);
|
|
417
417
|
}
|
|
418
418
|
}
|
|
419
419
|
fm = nil;
|
package/package.json
CHANGED
package/polyfill/Fetch.js
CHANGED
|
@@ -40,7 +40,10 @@ class ReactNativeBlobUtilFetchPolyfill {
|
|
|
40
40
|
log.verbose('convert FormData to blob body');
|
|
41
41
|
promise = Blob.build(body).then((b) => {
|
|
42
42
|
blobCache = b;
|
|
43
|
-
|
|
43
|
+
|
|
44
|
+
const contentType = 'multipart/form-data;boundary=' + b.multipartBoundary
|
|
45
|
+
options.headers['Content-Type'] = contentType;
|
|
46
|
+
options.headers['content-type'] = contentType;
|
|
44
47
|
return Promise.resolve(URIUtil.wrap(b._ref));
|
|
45
48
|
});
|
|
46
49
|
}
|