Added progressDivider

This commit is contained in:
kitolog 2016-05-31 12:46:03 +03:00
parent 39e356d1f8
commit 1bc9481a47
7 changed files with 32 additions and 10 deletions

View File

@ -9,6 +9,7 @@ typedef void (^ProgressCallback)(NSNumber*, NSNumber*);
@property (copy) NSString* fromUrl;
@property (copy) NSString* toFile;
@property (copy) NSNumber* progressDivider;
@property (copy) DownloaderCallback callback; // Download has finished (data written)
@property (copy) ErrorCallback errorCallback; // Something went wrong
@property (copy) BeginCallback beginCallback; // Download has started (headers received)

View File

@ -10,6 +10,7 @@
@property (retain) NSURLConnection* connection;
@property (retain) NSNumber* statusCode;
@property (retain) NSNumber* lastProgressValue;
@property (retain) NSNumber* contentLength;
@property (retain) NSNumber* bytesWritten;
@ -72,7 +73,19 @@
_bytesWritten = [NSNumber numberWithUnsignedInteger:[_bytesWritten unsignedIntegerValue] + data.length];
return _params.progressCallback(_contentLength, _bytesWritten);
if (_params.progressDivider <= 1) {
return _params.progressCallback(_contentLength, _bytesWritten);
} else {
NSLog(@"---Progress callback---");
long double progress = Math.round(((double) _bytesWritten * 100) / _contentLength);
if (progress % param.progressDivider == 0) {
if ((progress != _lastProgressValue) || (_bytesWritten == _contentLength)) {
NSLog(@"---Progress callback EMIT--- %zu", progress);
_lastProgressValue = [NSNumber numberWithLong:progress];
return _params.progressCallback(_contentLength, _bytesWritten);
}
}
}
}
}

View File

@ -155,7 +155,7 @@ var RNFS = {
.catch(convertError);
},
downloadFile(fromUrl, toFile, begin, progress) {
downloadFile(fromUrl, toFile, begin, progress, progressDivider = 1) {
var jobId = getJobId();
var subscriptions = [];
@ -167,7 +167,7 @@ var RNFS = {
subscriptions.push(NativeAppEventEmitter.addListener('DownloadProgress-' + jobId, progress));
}
return _downloadFile(fromUrl, toFile, jobId)
return _downloadFile(fromUrl, toFile, jobId, progressDivider)
.then(res => {
subscriptions.forEach(sub => sub.remove());
return res;

View File

@ -175,6 +175,7 @@ RCT_EXPORT_METHOD(moveFile:(NSString *)filepath
RCT_EXPORT_METHOD(downloadFile:(NSString *)urlStr
filepath:(NSString *)filepath
jobId:(nonnull NSNumber *)jobId
progressDivider:(nonnull NSNumber *)progressDivider
callback:(RCTResponseSenderBlock)callback)
{
@ -182,6 +183,7 @@ RCT_EXPORT_METHOD(downloadFile:(NSString *)urlStr
params.fromUrl = urlStr;
params.toFile = filepath;
params.progressDivider = progressDivider;
params.callback = ^(NSNumber* statusCode, NSNumber* bytesWritten) {
NSMutableDictionary* result = [[NSMutableDictionary alloc] initWithDictionary: @{@"jobId": jobId,

View File

@ -19,6 +19,7 @@ public class DownloadParams {
public URL src;
public File dest;
public float progressDivider;
public OnTaskCompleted onTaskCompleted;
public OnDownloadBegin onDownloadBegin;
public OnDownloadProgress onDownloadProgress;

View File

@ -81,12 +81,16 @@ public class Downloader extends AsyncTask<DownloadParams, int[], DownloadResult>
}
total += count;
double progress = Math.round(((double) total * 100) / lengthOfFile);
if (progress % 10 == 0) {
if ((progress != lastProgressValue) || (total == lengthOfFile)) {
Log.d("Downloader", "EMIT: " + String.valueOf(progress) + ", TOTAL:" + String.valueOf(total));
lastProgressValue = progress;
publishProgress(new int[]{lengthOfFile, total});
if (param.progressDivider <= 1) {
publishProgress(new int[]{lengthOfFile, total});
} else {
double progress = Math.round(((double) total * 100) / lengthOfFile);
if (progress % param.progressDivider == 0) {
if ((progress != lastProgressValue) || (total == lengthOfFile)) {
Log.d("Downloader", "EMIT: " + String.valueOf(progress) + ", TOTAL:" + String.valueOf(total));
lastProgressValue = progress;
publishProgress(new int[]{lengthOfFile, total});
}
}
}
output.write(data, 0, count);

View File

@ -220,7 +220,7 @@ public class RNFSManager extends ReactContextBaseJavaModule {
}
@ReactMethod
public void downloadFile(String urlStr, final String filepath, final int jobId, final Callback callback) {
public void downloadFile(String urlStr, final String filepath, final int jobId, float progressDivider, final Callback callback) {
try {
File file = new File(filepath);
URL url = new URL(urlStr);
@ -229,6 +229,7 @@ public class RNFSManager extends ReactContextBaseJavaModule {
params.src = url;
params.dest = file;
params.progressDivider = progressDivider;
params.onTaskCompleted = new DownloadParams.OnTaskCompleted() {
public void onTaskCompleted(DownloadResult res) {