Skip to content
This repository was archived by the owner on Mar 16, 2019. It is now read-only.

Commit 016e3c4

Browse files
committed
Add new attribute to fs.readStream #118
Introduce new argument which can limit readStream event frequency
1 parent a3897ae commit 016e3c4

File tree

7 files changed

+34
-8
lines changed

7 files changed

+34
-8
lines changed

src/android/src/main/java/com/RNFetchBlob/RNFetchBlob.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -207,13 +207,13 @@ public void run() {
207207
* @param encoding Stream encoding, should be one of `base64`, `ascii`, and `utf8`
208208
* @param bufferSize Stream buffer size, default to 4096 or 4095(base64).
209209
*/
210-
public void readStream(final String path, final String encoding, final int bufferSize, final String streamId) {
210+
public void readStream(final String path, final String encoding, final int bufferSize, final int tick, final String streamId) {
211211
final ReactApplicationContext ctx = this.getReactApplicationContext();
212212
threadPool.execute(new Runnable() {
213213
@Override
214214
public void run() {
215215
RNFetchBlobFS fs = new RNFetchBlobFS(ctx);
216-
fs.readStream(path, encoding, bufferSize, streamId);
216+
fs.readStream(path, encoding, bufferSize, tick, streamId);
217217
}
218218
});
219219
}

src/android/src/main/java/com/RNFetchBlob/RNFetchBlobFS.java

+8-1
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import android.os.AsyncTask;
1212
import android.os.Environment;
1313
import android.os.Looper;
14+
import android.os.SystemClock;
1415
import android.provider.MediaStore;
1516
import android.util.Base64;
1617

@@ -229,7 +230,7 @@ static public String getTmpPath(ReactApplicationContext ctx, String taskId) {
229230
* @param encoding File stream decoder, should be one of `base64`, `utf8`, `ascii`
230231
* @param bufferSize Buffer size of read stream, default to 4096 (4095 when encode is `base64`)
231232
*/
232-
public void readStream(String path, String encoding, int bufferSize, final String streamId) {
233+
public void readStream(String path, String encoding, int bufferSize, int tick, final String streamId) {
233234
path = normalizePath(path);
234235
try {
235236

@@ -253,6 +254,8 @@ public void readStream(String path, String encoding, int bufferSize, final Strin
253254
while ((cursor = fs.read(buffer)) != -1) {
254255
String chunk = new String(buffer, 0, cursor, "UTF-8");
255256
emitStreamEvent(streamId, "data", chunk);
257+
if(tick > 0)
258+
SystemClock.sleep(tick);
256259
}
257260
} else if (encoding.equalsIgnoreCase("ascii")) {
258261
while ((cursor = fs.read(buffer)) != -1) {
@@ -262,6 +265,8 @@ public void readStream(String path, String encoding, int bufferSize, final Strin
262265
chunk.pushInt((int)buffer[i]);
263266
}
264267
emitStreamEvent(streamId, "data", chunk);
268+
if(tick > 0)
269+
SystemClock.sleep(tick);
265270
}
266271
} else if (encoding.equalsIgnoreCase("base64")) {
267272
while ((cursor = fs.read(buffer)) != -1) {
@@ -274,6 +279,8 @@ public void readStream(String path, String encoding, int bufferSize, final Strin
274279
}
275280
else
276281
emitStreamEvent(streamId, "data", Base64.encodeToString(buffer, Base64.NO_WRAP));
282+
if(tick > 0)
283+
SystemClock.sleep(tick);
277284
}
278285
} else {
279286
String msg = "unrecognized encoding `" + encoding + "`";

src/android/src/main/java/com/RNFetchBlob/RNFetchBlobReq.java

+16-1
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
import com.facebook.react.bridge.ReadableArray;
1818
import com.facebook.react.bridge.ReadableMap;
1919
import com.facebook.react.bridge.ReadableMapKeySetIterator;
20+
import com.facebook.react.bridge.WritableArray;
2021
import com.facebook.react.bridge.WritableMap;
2122
import com.facebook.react.modules.core.DeviceEventManagerModule;
2223

@@ -32,6 +33,7 @@
3233
import java.nio.charset.CharacterCodingException;
3334
import java.nio.charset.Charset;
3435
import java.nio.charset.CharsetEncoder;
36+
import java.util.ArrayList;
3537
import java.util.HashMap;
3638
import java.util.concurrent.TimeUnit;
3739

@@ -87,6 +89,7 @@ enum ResponseType {
8789
ResponseType responseType;
8890
WritableMap respInfo;
8991
boolean timeout = false;
92+
ArrayList<String> redirects = new ArrayList<>();
9093

9194
public RNFetchBlobReq(ReadableMap options, String taskId, String method, String url, ReadableMap headers, String body, ReadableArray arrayBody, final Callback callback) {
9295
this.method = method.toUpperCase();
@@ -277,7 +280,13 @@ else if(cType.isEmpty()) {
277280
}
278281

279282
final Request req = builder.build();
280-
283+
clientBuilder.addNetworkInterceptor(new Interceptor() {
284+
@Override
285+
public Response intercept(Chain chain) throws IOException {
286+
redirects.add(chain.request().url().toString());
287+
return chain.proceed(chain.request());
288+
}
289+
});
281290
// Add request interceptor for upload progress event
282291
clientBuilder.addInterceptor(new Interceptor() {
283292
@Override
@@ -330,6 +339,7 @@ public Response intercept(Chain chain) throws IOException {
330339
clientBuilder.retryOnConnectionFailure(false);
331340
clientBuilder.followRedirects(true);
332341

342+
333343
OkHttpClient client = clientBuilder.retryOnConnectionFailure(true).build();
334344
Call call = client.newCall(req);
335345
taskTable.put(taskId, call);
@@ -508,6 +518,11 @@ private WritableMap getResponseInfo(Response resp, boolean isBlobResp) {
508518
for(int i =0;i< resp.headers().size();i++) {
509519
headers.putString(resp.headers().name(i), resp.headers().value(i));
510520
}
521+
WritableArray redirectList = Arguments.createArray();
522+
for(String r : redirects) {
523+
redirectList.pushString(r);
524+
}
525+
info.putArray("redirects", redirectList);
511526
info.putMap("headers", headers);
512527
Headers h = resp.headers();
513528
if(isBlobResp) {

src/fs.js

+4-1
Original file line numberDiff line numberDiff line change
@@ -113,8 +113,11 @@ function readStream(
113113
path : string,
114114
encoding : 'utf8' | 'ascii' | 'base64',
115115
bufferSize? : ?number
116+
tick? : ?number
116117
):Promise<RNFetchBlobReadStream> {
117-
return Promise.resolve(new RNFetchBlobReadStream(path, encoding, bufferSize))
118+
if(!tick)
119+
tick = -1
120+
return Promise.resolve(new RNFetchBlobReadStream(path, encoding, bufferSize, tick))
118121
}
119122

120123
/**

src/ios/RNFetchBlob/RNFetchBlob.m

+2-2
Original file line numberDiff line numberDiff line change
@@ -374,7 +374,7 @@ - (NSDictionary *)constantsToExport
374374
})
375375

376376
#pragma mark - fs.readStream
377-
RCT_EXPORT_METHOD(readStream:(NSString *)path withEncoding:(NSString *)encoding bufferSize:(int)bufferSize streamId:(NSString *)streamId
377+
RCT_EXPORT_METHOD(readStream:(NSString *)path withEncoding:(NSString *)encoding bufferSize:(int)bufferSize tick:(int)tick streamId:(NSString *)streamId
378378
{
379379

380380
// RNFetchBlobFS *fileStream = [[RNFetchBlobFS alloc] initWithBridgeRef:self.bridge];
@@ -386,7 +386,7 @@ - (NSDictionary *)constantsToExport
386386
}
387387

388388
// [fileStream readWithPath:path useEncoding:encoding bufferSize:bufferSize];
389-
[RNFetchBlobFS readStream:path encoding:encoding bufferSize:bufferSize streamId:streamId bridgeRef:_bridge];
389+
[RNFetchBlobFS readStream:path encoding:encoding bufferSize:bufferSize tick:tick streamId:streamId bridgeRef:_bridge];
390390
})
391391

392392
#pragma mark - fs.getEnvionmentDirs

src/ios/RNFetchBlobFS.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@
6464
rejecter:(RCTPromiseRejectBlock)reject;
6565
//+ (void) writeFileFromFile:(NSString *)src toFile:(NSString *)dest append:(BOOL)append;
6666
+ (void) writeAssetToPath:(ALAssetRepresentation * )rep dest:(NSString *)dest;
67-
+ (void) readStream:(NSString *)uri encoding:(NSString * )encoding bufferSize:(int)bufferSize streamId:(NSString *)streamId bridgeRef:(RCTBridge *)bridgeRef;
67+
+ (void) readStream:(NSString *)uri encoding:(NSString * )encoding bufferSize:(int)bufferSize tick:(int)tick streamId:(NSString *)streamId bridgeRef:(RCTBridge *)bridgeRef;
6868

6969
// constructor
7070
- (id) init;

src/ios/RNFetchBlobFS.m

+1
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,7 @@ + (NSString *) getTempPath:(NSString*)taskId withExtension:(NSString *)ext {
122122
+ (void) readStream:(NSString *)uri
123123
encoding:(NSString * )encoding
124124
bufferSize:(int)bufferSize
125+
tick:(int)tick
125126
streamId:(NSString *)streamId
126127
bridgeRef:(RCTBridge *)bridgeRef
127128
{

0 commit comments

Comments
 (0)