@hxa-rn/rn-fetch-blob 0.12.0
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/LICENSE +21 -0
- package/README.md +290 -0
- package/harmony/fetch_blob/LICENSE +21 -0
- package/harmony/fetch_blob/NOTICE +33 -0
- package/harmony/fetch_blob/OAT.xml +38 -0
- package/harmony/fetch_blob/build-profile.json5 +16 -0
- package/harmony/fetch_blob/hvigorfile.ts +2 -0
- package/harmony/fetch_blob/index.ets +1 -0
- package/harmony/fetch_blob/oh-package.json5 +14 -0
- package/harmony/fetch_blob/src/main/cpp/CMakeLists.txt +15 -0
- package/harmony/fetch_blob/src/main/cpp/FetchBlobPackage.h +13 -0
- package/harmony/fetch_blob/src/main/cpp/generated/RNOH/generated/BaseFetchBlobPackage.h +72 -0
- package/harmony/fetch_blob/src/main/cpp/generated/RNOH/generated/turbo_modules/RNFetchBlob.cpp +55 -0
- package/harmony/fetch_blob/src/main/cpp/generated/RNOH/generated/turbo_modules/RNFetchBlob.h +16 -0
- package/harmony/fetch_blob/src/main/ets/FetchBlobTurboModulesFactory.ets +18 -0
- package/harmony/fetch_blob/src/main/ets/Logger.ts +40 -0
- package/harmony/fetch_blob/src/main/ets/RNFetchBlobConfig.ts +45 -0
- package/harmony/fetch_blob/src/main/ets/RNFetchBlobFS.ts +673 -0
- package/harmony/fetch_blob/src/main/ets/RNFetchBlobImpl.ts +246 -0
- package/harmony/fetch_blob/src/main/ets/RNFetchBlobReq.ts +530 -0
- package/harmony/fetch_blob/src/main/ets/RNFetchBlobStream.ts +169 -0
- package/harmony/fetch_blob/src/main/ets/RNFetchBlobTurboModule.ts +192 -0
- package/harmony/fetch_blob/src/main/ets/generated/index.ets +5 -0
- package/harmony/fetch_blob/src/main/ets/generated/ts.ts +5 -0
- package/harmony/fetch_blob/src/main/ets/generated/turboModules/RNFetchBlob.ts +92 -0
- package/harmony/fetch_blob/src/main/ets/generated/turboModules/ts.ts +5 -0
- package/harmony/fetch_blob/src/main/module.json5 +22 -0
- package/harmony/fetch_blob/src/main/resources/base/element/string.json +8 -0
- package/harmony/fetch_blob/src/main/resources/en_US/element/string.json +8 -0
- package/harmony/fetch_blob/src/main/resources/zh_CN/element/string.json +8 -0
- package/harmony/fetch_blob.har +0 -0
- package/package.json +59 -0
- package/src/android.js +62 -0
- package/src/class/RNFetchBlobFile.js +17 -0
- package/src/class/RNFetchBlobReadStream.js +82 -0
- package/src/class/RNFetchBlobSession.js +74 -0
- package/src/class/RNFetchBlobWriteStream.js +57 -0
- package/src/class/StatefulPromise.js +7 -0
- package/src/fs.js +432 -0
- package/src/index.d.ts +690 -0
- package/src/index.js +577 -0
- package/src/ios.js +54 -0
- package/src/json-stream.js +45 -0
- package/src/lib/oboe-browser.min.js +1 -0
- package/src/polyfill/Blob.js +362 -0
- package/src/polyfill/Event.js +11 -0
- package/src/polyfill/EventTarget.js +79 -0
- package/src/polyfill/Fetch.js +213 -0
- package/src/polyfill/File.js +27 -0
- package/src/polyfill/FileReader.js +90 -0
- package/src/polyfill/ProgressEvent.js +32 -0
- package/src/polyfill/XMLHttpRequest.js +446 -0
- package/src/polyfill/XMLHttpRequestEventTarget.js +118 -0
- package/src/polyfill/index.js +11 -0
- package/src/specs/v1/NativeRNFetchBlob.ts +85 -0
- package/src/types.js +64 -0
- package/src/utils/log.js +40 -0
- package/src/utils/unicode.js +7 -0
- package/src/utils/uri.js +28 -0
- package/src/utils/uuid.js +4 -0
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2026. All rights reserved.
|
|
3
|
+
* HarmonyOS adaptation of rn-fetch-blob (RNFetchBlob TurboModule).
|
|
4
|
+
*
|
|
5
|
+
* ETS TurboModule entry. Delegates all calls to RNFetchBlobImpl. The generated
|
|
6
|
+
* codegen spec (TM.RNFetchBlob.Spec) drives the C++ methodMap_; this class does
|
|
7
|
+
* not `implements` it because callback signatures are multi-arg on the native
|
|
8
|
+
* side while the codegen spec describes a single-array callback.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
import { UITurboModule, UITurboModuleContext } from '@rnoh/react-native-openharmony/ts';
|
|
12
|
+
import common from '@ohos.app.ability.common';
|
|
13
|
+
import RNFetchBlobImpl, {
|
|
14
|
+
SimpleCallback,
|
|
15
|
+
DataCallback,
|
|
16
|
+
ExistsCallback,
|
|
17
|
+
WriteStreamCallback,
|
|
18
|
+
CancelCallback,
|
|
19
|
+
} from './RNFetchBlobImpl';
|
|
20
|
+
import { RNFetchBlobConfig } from './RNFetchBlobConfig';
|
|
21
|
+
import { FormData, ReqCallback } from './RNFetchBlobReq';
|
|
22
|
+
|
|
23
|
+
export class RNFetchBlobTurboModule extends UITurboModule {
|
|
24
|
+
private context: common.UIAbilityContext = this.ctx.uiAbilityContext;
|
|
25
|
+
private impl: RNFetchBlobImpl = new RNFetchBlobImpl(this.context, this.ctx);
|
|
26
|
+
|
|
27
|
+
constructor(ctx: UITurboModuleContext) {
|
|
28
|
+
super(ctx);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
getConstants(): Object {
|
|
32
|
+
return this.impl.getSystemFolders();
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
fetchBlob(options: RNFetchBlobConfig, taskId: string, method: string, url: string, headers: Object,
|
|
36
|
+
body: string, callback: ReqCallback): void {
|
|
37
|
+
this.impl.fetchBlob(options, taskId, method, url, headers, body, callback);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
fetchBlobForm(options: RNFetchBlobConfig, taskId: string, method: string, url: string, headers: Object,
|
|
41
|
+
form: FormData, callback: ReqCallback): void {
|
|
42
|
+
this.impl.fetchBlobForm(options, taskId, method, url, headers, form, callback);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
cancelRequest(taskId: string, callback: CancelCallback): void {
|
|
46
|
+
this.impl.cancelRequest(taskId, callback);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
enableProgressReport(taskId: string, interval: number, count: number): void {
|
|
50
|
+
this.impl.enableProgressReport(taskId, interval, count);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
enableUploadProgressReport(taskId: string, interval: number, count: number): void {
|
|
54
|
+
this.impl.enableUploadProgressReport(taskId, interval, count);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
createFile(path: string, content: string, encode: string): Promise<string> {
|
|
58
|
+
return this.impl.createFile(path, content, encode);
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
createFileASCII(path: string, dataArray: number[]): Promise<void> {
|
|
62
|
+
return this.impl.createFileASCII(path, dataArray);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
writeFile(path: string, encoding: string, data: string, append: boolean): Promise<number> {
|
|
66
|
+
return this.impl.writeFile(path, encoding, data, append);
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
writeFileArray(path: string, data: number[], append: boolean): Promise<number> {
|
|
70
|
+
return this.impl.writeFileArray(path, data, append);
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
readFile(path: string, encoding: string): Promise<Object> {
|
|
74
|
+
return this.impl.readFile(path, encoding);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
unlink(path: string, callback: SimpleCallback): void {
|
|
78
|
+
this.impl.unlink(path, callback);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
mkdir(path: string): Promise<void> {
|
|
82
|
+
return this.impl.mkdir(path);
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
exists(path: string, callback: ExistsCallback): void {
|
|
86
|
+
this.impl.exists(path, callback);
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
cp(path: string, dest: string, callback: DataCallback): void {
|
|
90
|
+
this.impl.cp(path, dest, callback);
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
mv(path: string, dest: string, callback: DataCallback): void {
|
|
94
|
+
this.impl.mv(path, dest, callback);
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
ls(path: string): Promise<string[]> {
|
|
98
|
+
return this.impl.ls(path);
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
stat(path: string, callback: DataCallback): void {
|
|
102
|
+
this.impl.stat(path, callback);
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
lstat(path: string, callback: DataCallback): void {
|
|
106
|
+
this.impl.lstat(path, callback);
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
hash(path: string, algorithm: string): Promise<string> {
|
|
110
|
+
return this.impl.hash(path, algorithm);
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
slice(src: string, dest: string, start: number, end: number): Promise<string> {
|
|
114
|
+
return this.impl.slice(src, dest, start, end);
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
df(callback: DataCallback): void {
|
|
118
|
+
this.impl.df(callback);
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
removeSession(paths: string[], callback: SimpleCallback): void {
|
|
122
|
+
this.impl.removeSession(paths, callback);
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
writeStream(path: string, encoding: string, append: boolean, callback: WriteStreamCallback): void {
|
|
126
|
+
this.impl.writeStream(path, encoding, append, callback);
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
writeChunk(streamId: string, data: string, callback: SimpleCallback): void {
|
|
130
|
+
this.impl.writeChunk(streamId, data, callback);
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
writeArrayChunk(streamId: string, dataArray: number[], callback: SimpleCallback): void {
|
|
134
|
+
this.impl.writeArrayChunk(streamId, dataArray, callback);
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
closeStream(streamId: string, callback: SimpleCallback): void {
|
|
138
|
+
this.impl.closeStream(streamId, callback);
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
readStream(path: string, encoding: string, bufferSize: number, tick: number, streamId: string): void {
|
|
142
|
+
this.impl.readStream(path, encoding, bufferSize, tick, streamId);
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
scanFile(pairs: Object[], callback: SimpleCallback): void {
|
|
146
|
+
this.impl.scanFile(pairs, callback);
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
actionViewIntent(path: string, mime: string): Promise<void> {
|
|
150
|
+
return this.impl.actionViewIntent(path, mime);
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
getContentIntent(mime: string): Promise<string> {
|
|
154
|
+
return this.impl.getContentIntent(mime);
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
addCompleteDownload(config: Object): Promise<void> {
|
|
158
|
+
return this.impl.addCompleteDownload(config);
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
getSDCardDir(): Promise<string> {
|
|
162
|
+
return this.impl.getSDCardDir();
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
getSDCardApplicationDir(): Promise<string> {
|
|
166
|
+
return this.impl.getSDCardApplicationDir();
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
pathForAppGroup(groupName: string): Promise<string> {
|
|
170
|
+
return this.impl.pathForAppGroup(groupName);
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
syncPathAppGroup(groupName: string): string {
|
|
174
|
+
return this.impl.syncPathAppGroup(groupName);
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
previewDocument(uri: string, scheme: string): Promise<void> {
|
|
178
|
+
return this.impl.previewDocument(uri, scheme);
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
openDocument(uri: string, scheme: string): Promise<void> {
|
|
182
|
+
return this.impl.openDocument(uri, scheme);
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
excludeFromBackupKey(url: string): Promise<void> {
|
|
186
|
+
return this.impl.excludeFromBackupKey(url);
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
emitExpiredEvent(callback: () => void): void {
|
|
190
|
+
this.impl.emitExpiredEvent(callback);
|
|
191
|
+
}
|
|
192
|
+
}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This code was generated by "react-native codegen-lib-harmony"
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
import { Tag } from "@rnoh/react-native-openharmony/ts"
|
|
6
|
+
|
|
7
|
+
export namespace RNFetchBlob {
|
|
8
|
+
export const NAME = 'RNFetchBlob' as const
|
|
9
|
+
|
|
10
|
+
export interface Spec {
|
|
11
|
+
getConstants(): {DocumentDir: string, CacheDir: string, PictureDir: string, MusicDir: string, MovieDir: string, DownloadDir: string, DCIMDir: string, SDCardDir: string, SDCardApplicationDir: string, MainBundleDir: string, LibraryDir: string};
|
|
12
|
+
|
|
13
|
+
fetchBlob(options: Object, taskId: string, method: string, url: string, headers: Object, body: string, callback: (value: Object[]) => void): void;
|
|
14
|
+
|
|
15
|
+
fetchBlobForm(options: Object, taskId: string, method: string, url: string, headers: Object, form: Object[], callback: (value: Object[]) => void): void;
|
|
16
|
+
|
|
17
|
+
cancelRequest(taskId: string, callback: (value: Object[]) => void): void;
|
|
18
|
+
|
|
19
|
+
enableProgressReport(taskId: string, interval: number, count: number): void;
|
|
20
|
+
|
|
21
|
+
enableUploadProgressReport(taskId: string, interval: number, count: number): void;
|
|
22
|
+
|
|
23
|
+
createFile(path: string, content: string, encode: string): Promise<string>;
|
|
24
|
+
|
|
25
|
+
createFileASCII(path: string, dataArray: number[]): Promise<void>;
|
|
26
|
+
|
|
27
|
+
writeFile(path: string, encoding: string, data: string, append: boolean): Promise<number>;
|
|
28
|
+
|
|
29
|
+
writeFileArray(path: string, data: number[], append: boolean): Promise<number>;
|
|
30
|
+
|
|
31
|
+
readFile(path: string, encoding: string): Promise<Object>;
|
|
32
|
+
|
|
33
|
+
unlink(path: string, callback: (value: Object[]) => void): void;
|
|
34
|
+
|
|
35
|
+
mkdir(path: string): Promise<void>;
|
|
36
|
+
|
|
37
|
+
exists(path: string, callback: (value: boolean, isDir: boolean) => void): void;
|
|
38
|
+
|
|
39
|
+
cp(path: string, dest: string, callback: (value: Object[]) => void): void;
|
|
40
|
+
|
|
41
|
+
mv(path: string, dest: string, callback: (value: Object[]) => void): void;
|
|
42
|
+
|
|
43
|
+
ls(path: string): Promise<string[]>;
|
|
44
|
+
|
|
45
|
+
stat(path: string, callback: (value: Object[]) => void): void;
|
|
46
|
+
|
|
47
|
+
lstat(path: string, callback: (value: Object[]) => void): void;
|
|
48
|
+
|
|
49
|
+
hash(path: string, algorithm: string): Promise<string>;
|
|
50
|
+
|
|
51
|
+
slice(src: string, dest: string, start: number, end: number): Promise<string>;
|
|
52
|
+
|
|
53
|
+
df(callback: (value: Object[]) => void): void;
|
|
54
|
+
|
|
55
|
+
removeSession(paths: string[], callback: (value: Object[]) => void): void;
|
|
56
|
+
|
|
57
|
+
writeStream(path: string, encoding: string, append: boolean, callback: (value: Object[]) => void): void;
|
|
58
|
+
|
|
59
|
+
writeChunk(streamId: string, data: string, callback: (value: Object[]) => void): void;
|
|
60
|
+
|
|
61
|
+
writeArrayChunk(streamId: string, dataArray: number[], callback: (value: Object[]) => void): void;
|
|
62
|
+
|
|
63
|
+
closeStream(streamId: string, callback: (value: Object[]) => void): void;
|
|
64
|
+
|
|
65
|
+
readStream(path: string, encoding: string, bufferSize: number, tick: number, streamId: string): void;
|
|
66
|
+
|
|
67
|
+
scanFile(pairs: Object[], callback: (value: Object[]) => void): void;
|
|
68
|
+
|
|
69
|
+
actionViewIntent(path: string, mime: string): Promise<void>;
|
|
70
|
+
|
|
71
|
+
getContentIntent(mime: string): Promise<string>;
|
|
72
|
+
|
|
73
|
+
addCompleteDownload(config: Object): Promise<void>;
|
|
74
|
+
|
|
75
|
+
getSDCardDir(): Promise<string>;
|
|
76
|
+
|
|
77
|
+
getSDCardApplicationDir(): Promise<string>;
|
|
78
|
+
|
|
79
|
+
pathForAppGroup(groupName: string): Promise<string>;
|
|
80
|
+
|
|
81
|
+
syncPathAppGroup(groupName: string): string;
|
|
82
|
+
|
|
83
|
+
previewDocument(uri: string, scheme: string): Promise<void>;
|
|
84
|
+
|
|
85
|
+
openDocument(uri: string, scheme: string): Promise<void>;
|
|
86
|
+
|
|
87
|
+
excludeFromBackupKey(url: string): Promise<void>;
|
|
88
|
+
|
|
89
|
+
emitExpiredEvent(callback: () => void): void;
|
|
90
|
+
|
|
91
|
+
}
|
|
92
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
{
|
|
2
|
+
"module": {
|
|
3
|
+
"name": "fetch_blob",
|
|
4
|
+
"type": "har",
|
|
5
|
+
"deviceTypes": [
|
|
6
|
+
"default",
|
|
7
|
+
"tablet",
|
|
8
|
+
"2in1"
|
|
9
|
+
],
|
|
10
|
+
"requestPermissions": [
|
|
11
|
+
{
|
|
12
|
+
"name": "ohos.permission.INTERNET"
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
"name": "ohos.permission.GET_WIFI_INFO"
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"name": "ohos.permission.GET_NETWORK_INFO"
|
|
19
|
+
}
|
|
20
|
+
]
|
|
21
|
+
}
|
|
22
|
+
}
|
|
Binary file
|
package/package.json
ADDED
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@hxa-rn/rn-fetch-blob",
|
|
3
|
+
"displayName": "@hxa-rn/rn-fetch-blob",
|
|
4
|
+
"version": "0.12.0",
|
|
5
|
+
"description": "A module provides upload, download, and files access API. Supports file stream read/write for process large files.",
|
|
6
|
+
"main": "./src/index.js",
|
|
7
|
+
"module": "./src/index.js",
|
|
8
|
+
"react-native": "./src/index.js",
|
|
9
|
+
"license": "MIT",
|
|
10
|
+
"private": false,
|
|
11
|
+
"repository": {
|
|
12
|
+
"url": "https://github.com/joltup/rn-fetch-blob.git"
|
|
13
|
+
},
|
|
14
|
+
"keywords": [
|
|
15
|
+
"react-native",
|
|
16
|
+
"harmony",
|
|
17
|
+
"harmonyos"
|
|
18
|
+
],
|
|
19
|
+
"homepage": "https://github.com/joltup/rn-fetch-blob",
|
|
20
|
+
"publishConfig": {
|
|
21
|
+
"registry": "https://registry.npmjs.org/"
|
|
22
|
+
},
|
|
23
|
+
"files": [
|
|
24
|
+
"src/",
|
|
25
|
+
"README.md",
|
|
26
|
+
"LICENSE",
|
|
27
|
+
"harmony/"
|
|
28
|
+
],
|
|
29
|
+
"scripts": {
|
|
30
|
+
"codegen-lib": "react-native codegen-lib-harmony --no-safety-check --npm-package-name fetch_blob --cpp-output-path ./harmony/fetch_blob/src/main/cpp/generated --ets-output-path ./harmony/fetch_blob/src/main/ets/generated --turbo-modules-spec-paths ./src/specs/v1/NativeRNFetchBlob.ts"
|
|
31
|
+
},
|
|
32
|
+
"peerDependencies": {
|
|
33
|
+
"react-native": ">=0.72"
|
|
34
|
+
},
|
|
35
|
+
"devDependencies": {
|
|
36
|
+
"react": "18.2.0",
|
|
37
|
+
"@types/react": "18.2.79",
|
|
38
|
+
"react-native": "0.72.5",
|
|
39
|
+
"jest": "^29.6.3",
|
|
40
|
+
"@react-native-oh/react-native-harmony-cli": "^0.77.50",
|
|
41
|
+
"metro": "^0.81.0"
|
|
42
|
+
},
|
|
43
|
+
"engines": {
|
|
44
|
+
"node": ">=18"
|
|
45
|
+
},
|
|
46
|
+
"harmony": {
|
|
47
|
+
"alias": "rn-fetch-blob",
|
|
48
|
+
"autolinking": {
|
|
49
|
+
"cmakeLibraryTargetName": "fetch_blob",
|
|
50
|
+
"ohPackageName": "@hxa-rn/rn-fetch-blob",
|
|
51
|
+
"etsPackageClassName": "FetchBlobPackage",
|
|
52
|
+
"cppPackageClassName": "FetchBlobPackage"
|
|
53
|
+
}
|
|
54
|
+
},
|
|
55
|
+
"dependencies": {
|
|
56
|
+
"base-64": "0.1.0",
|
|
57
|
+
"glob": "7.0.6"
|
|
58
|
+
}
|
|
59
|
+
}
|
package/src/android.js
ADDED
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
// Copyright 2016 wkh237@github. All rights reserved.
|
|
2
|
+
// Use of this source code is governed by a MIT-style license that can be
|
|
3
|
+
// found in the LICENSE file.
|
|
4
|
+
|
|
5
|
+
import {
|
|
6
|
+
DeviceEventEmitter,
|
|
7
|
+
Platform,
|
|
8
|
+
NativeAppEventEmitter,
|
|
9
|
+
} from 'react-native'
|
|
10
|
+
import NativeRNFetchBlob from './specs/v1/NativeRNFetchBlob'
|
|
11
|
+
|
|
12
|
+
const RNFetchBlob:RNFetchBlobNative = NativeRNFetchBlob
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Send an intent to open the file.
|
|
16
|
+
* @param {string} path Path of the file to be open.
|
|
17
|
+
* @param {string} mime MIME type string
|
|
18
|
+
* @return {Promise}
|
|
19
|
+
*/
|
|
20
|
+
function actionViewIntent(path:string, mime:string = 'text/plain') {
|
|
21
|
+
if(Platform.OS === 'android' || Platform.OS === 'harmony')
|
|
22
|
+
return NativeRNFetchBlob.actionViewIntent(path, mime)
|
|
23
|
+
else
|
|
24
|
+
return Promise.reject('RNFetchBlob.actionViewIntent only supports Android / HarmonyOS.')
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
function getContentIntent(mime:string) {
|
|
28
|
+
if(Platform.OS === 'android' || Platform.OS === 'harmony')
|
|
29
|
+
return NativeRNFetchBlob.getContentIntent(mime)
|
|
30
|
+
else
|
|
31
|
+
return Promise.reject('RNFetchBlob.getContentIntent only supports Android / HarmonyOS.')
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
function addCompleteDownload(config) {
|
|
35
|
+
if(Platform.OS === 'android' || Platform.OS === 'harmony')
|
|
36
|
+
return NativeRNFetchBlob.addCompleteDownload(config)
|
|
37
|
+
else
|
|
38
|
+
return Promise.reject('RNFetchBlob.addCompleteDownload only supports Android / HarmonyOS.')
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
function getSDCardDir() {
|
|
42
|
+
if(Platform.OS === 'android' || Platform.OS === 'harmony')
|
|
43
|
+
return NativeRNFetchBlob.getSDCardDir()
|
|
44
|
+
else
|
|
45
|
+
return Promise.reject('RNFetchBlob.getSDCardDir only supports Android / HarmonyOS.')
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
function getSDCardApplicationDir() {
|
|
49
|
+
if(Platform.OS === 'android' || Platform.OS === 'harmony')
|
|
50
|
+
return NativeRNFetchBlob.getSDCardApplicationDir()
|
|
51
|
+
else
|
|
52
|
+
return Promise.reject('RNFetchBlob.getSDCardApplicationDir only supports Android / HarmonyOS.')
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
export default {
|
|
57
|
+
actionViewIntent,
|
|
58
|
+
getContentIntent,
|
|
59
|
+
addCompleteDownload,
|
|
60
|
+
getSDCardDir,
|
|
61
|
+
getSDCardApplicationDir,
|
|
62
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
// Copyright 2016 wkh237@github. All rights reserved.
|
|
2
|
+
// Use of this source code is governed by a MIT-style license that can be
|
|
3
|
+
// found in the LICENSE file.
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
import {
|
|
7
|
+
DeviceEventEmitter,
|
|
8
|
+
NativeAppEventEmitter,
|
|
9
|
+
} from 'react-native'
|
|
10
|
+
import NativeRNFetchBlob from '../specs/v1/NativeRNFetchBlob'
|
|
11
|
+
|
|
12
|
+
const RNFetchBlob = NativeRNFetchBlob
|
|
13
|
+
const emitter = DeviceEventEmitter
|
|
14
|
+
|
|
15
|
+
export default class RNFetchBlobFile {
|
|
16
|
+
|
|
17
|
+
}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
// Copyright 2016 wkh237@github. All rights reserved.
|
|
2
|
+
// Use of this source code is governed by a MIT-style license that can be
|
|
3
|
+
// found in the LICENSE file.
|
|
4
|
+
|
|
5
|
+
import {
|
|
6
|
+
DeviceEventEmitter,
|
|
7
|
+
NativeAppEventEmitter,
|
|
8
|
+
} from 'react-native'
|
|
9
|
+
import NativeRNFetchBlob from '../specs/v1/NativeRNFetchBlob'
|
|
10
|
+
import UUID from '../utils/uuid'
|
|
11
|
+
|
|
12
|
+
const RNFetchBlob = NativeRNFetchBlob
|
|
13
|
+
const emitter = DeviceEventEmitter
|
|
14
|
+
|
|
15
|
+
export default class RNFetchBlobReadStream {
|
|
16
|
+
|
|
17
|
+
path : string;
|
|
18
|
+
encoding : 'utf8' | 'ascii' | 'base64';
|
|
19
|
+
bufferSize : ?number;
|
|
20
|
+
closed : boolean;
|
|
21
|
+
tick : number = 10;
|
|
22
|
+
|
|
23
|
+
constructor(path:string, encoding:string, bufferSize?:?number, tick:number) {
|
|
24
|
+
if(!path)
|
|
25
|
+
throw Error('RNFetchBlob could not open file stream with empty `path`')
|
|
26
|
+
this.encoding = encoding || 'utf8'
|
|
27
|
+
this.bufferSize = bufferSize
|
|
28
|
+
this.path = path
|
|
29
|
+
this.closed = false
|
|
30
|
+
this.tick = tick
|
|
31
|
+
this._onData = () => {}
|
|
32
|
+
this._onEnd = () => {}
|
|
33
|
+
this._onError = () => {}
|
|
34
|
+
this.streamId = 'RNFBRS'+ UUID()
|
|
35
|
+
|
|
36
|
+
// register for file stream event
|
|
37
|
+
let subscription = emitter.addListener(this.streamId, (e) => {
|
|
38
|
+
let {event, code, detail} = e
|
|
39
|
+
if(this._onData && event === 'data') {
|
|
40
|
+
this._onData(detail)
|
|
41
|
+
return
|
|
42
|
+
}
|
|
43
|
+
else if (this._onEnd && event === 'end') {
|
|
44
|
+
this._onEnd(detail)
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
const err = new Error(detail)
|
|
48
|
+
err.code = code || 'EUNSPECIFIED'
|
|
49
|
+
if(this._onError)
|
|
50
|
+
this._onError(err)
|
|
51
|
+
else
|
|
52
|
+
throw err
|
|
53
|
+
}
|
|
54
|
+
// when stream closed or error, remove event handler
|
|
55
|
+
if (event === 'error' || event === 'end') {
|
|
56
|
+
subscription.remove()
|
|
57
|
+
this.closed = true
|
|
58
|
+
}
|
|
59
|
+
})
|
|
60
|
+
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
open() {
|
|
64
|
+
if(!this.closed)
|
|
65
|
+
NativeRNFetchBlob.readStream(this.path, this.encoding, this.bufferSize || 10240 , this.tick || -1, this.streamId)
|
|
66
|
+
else
|
|
67
|
+
throw new Error('Stream closed')
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
onData(fn:() => void) {
|
|
71
|
+
this._onData = fn
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
onError(fn) {
|
|
75
|
+
this._onError = fn
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
onEnd (fn) {
|
|
79
|
+
this._onEnd = fn
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
// Copyright 2016 wkh237@github. All rights reserved.
|
|
2
|
+
// Use of this source code is governed by a MIT-style license that can be
|
|
3
|
+
// found in the LICENSE file.
|
|
4
|
+
|
|
5
|
+
import {
|
|
6
|
+
DeviceEventEmitter,
|
|
7
|
+
NativeAppEventEmitter,
|
|
8
|
+
} from 'react-native'
|
|
9
|
+
import NativeRNFetchBlob from '../specs/v1/NativeRNFetchBlob'
|
|
10
|
+
|
|
11
|
+
const RNFetchBlob = NativeRNFetchBlob
|
|
12
|
+
|
|
13
|
+
let sessions = {}
|
|
14
|
+
|
|
15
|
+
export default class RNFetchBlobSession {
|
|
16
|
+
|
|
17
|
+
name : string;
|
|
18
|
+
|
|
19
|
+
static getSession(name:string):any {
|
|
20
|
+
return sessions[name]
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
static setSession(name:string, val:any) {
|
|
24
|
+
sessions[name] = val
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
static removeSession(name:string) {
|
|
28
|
+
delete sessions[name]
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
constructor(name:string, list:Array<string>) {
|
|
32
|
+
this.name = name
|
|
33
|
+
if(!sessions[name]) {
|
|
34
|
+
if(Array.isArray(list))
|
|
35
|
+
sessions[name] = list
|
|
36
|
+
else
|
|
37
|
+
sessions[name] = []
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
add(path:string):RNFetchBlobSession {
|
|
42
|
+
sessions[this.name].push(path)
|
|
43
|
+
return this
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
remove(path:string):RNFetchBlobSession {
|
|
47
|
+
let list = sessions[this.name]
|
|
48
|
+
for(let i of list) {
|
|
49
|
+
if(list[i] === path) {
|
|
50
|
+
sessions[this.name].splice(i, 1)
|
|
51
|
+
break;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
return this
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
list():Array<string> {
|
|
58
|
+
return sessions[this.name]
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
dispose():Promise {
|
|
62
|
+
return new Promise((resolve, reject) => {
|
|
63
|
+
NativeRNFetchBlob.removeSession(sessions[this.name], (err) => {
|
|
64
|
+
if(err)
|
|
65
|
+
reject(new Error(err))
|
|
66
|
+
else {
|
|
67
|
+
delete sessions[this.name]
|
|
68
|
+
resolve()
|
|
69
|
+
}
|
|
70
|
+
})
|
|
71
|
+
})
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
}
|