@@ -84,8 +84,10 @@ - (void)removeTaskFromMap: (NSURLSessionTask *)task {
84
84
NSNumber *taskId = @(task.taskIdentifier );
85
85
RNBGDTaskConfig *taskConfig = taskToConfigMap[taskId];
86
86
[taskToConfigMap removeObjectForKey: taskId];
87
- [urlToConfigMap removeObjectForKey: task.currentRequest.URL.absoluteString];
88
- [[NSUserDefaults standardUserDefaults ] setObject: [self serialize: urlToConfigMap] forKey: URL_TO_CONFIG_MAP_KEY];
87
+ @synchronized (urlToConfigMap) {
88
+ [urlToConfigMap removeObjectForKey: task.currentRequest.URL.absoluteString];
89
+ [[NSUserDefaults standardUserDefaults ] setObject: [self serialize: urlToConfigMap] forKey: URL_TO_CONFIG_MAP_KEY];
90
+ }
89
91
if (taskConfig) {
90
92
[idToTaskMap removeObjectForKey: taskConfig.id ];
91
93
[idToPercentMap removeObjectForKey: taskConfig.id ];
@@ -216,29 +218,31 @@ - (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTas
216
218
}
217
219
218
220
- (void )URLSession : (NSURLSession *)session downloadTask : (NSURLSessionDownloadTask *)downloadTask didWriteData : (int64_t )bytesWritten totalBytesWritten : (int64_t )totalBytesWritten totalBytesExpectedToWrite : (int64_t )totalBytesExpectedToWrite {
219
- RNBGDTaskConfig *taskCofig = taskToConfigMap[@(downloadTask.taskIdentifier)];
220
- if (taskCofig != nil ) {
221
- if (!taskCofig.reportedBegin ) {
222
- [self sendEventWithName: @" downloadBegin" body: @{@" id" : taskCofig.id , @" expectedBytes" : [NSNumber numberWithLongLong: totalBytesExpectedToWrite]}];
223
- urlToConfigMap[downloadTask.currentRequest.URL.absoluteString] = taskCofig;
224
- [[NSUserDefaults standardUserDefaults ] setObject: [self serialize: urlToConfigMap] forKey: URL_TO_CONFIG_MAP_KEY];
225
- taskCofig.reportedBegin = YES ;
226
- }
227
-
228
- NSNumber *prevPercent = idToPercentMap[taskCofig.id ];
229
- NSNumber *percent = [NSNumber numberWithFloat: (float )totalBytesWritten/(float )totalBytesExpectedToWrite];
230
- if ([percent floatValue ] - [prevPercent floatValue ] > 0 .01f ) {
231
- progressReports[taskCofig.id ] = @{@" id" : taskCofig.id , @" written" : [NSNumber numberWithLongLong: totalBytesWritten], @" total" : [NSNumber numberWithLongLong: totalBytesExpectedToWrite], @" percent" : percent};
232
- idToPercentMap[taskCofig.id ] = percent;
233
- }
234
-
235
- NSDate *now = [[NSDate alloc ] init ];
236
- if ([now timeIntervalSinceDate: lastProgressReport] > 1.5 && progressReports.count > 0 ) {
237
- if (self.bridge ) {
238
- [self sendEventWithName: @" downloadProgress" body: [progressReports allValues ]];
221
+ @synchronized (self) {
222
+ RNBGDTaskConfig *taskCofig = taskToConfigMap[@(downloadTask.taskIdentifier)];
223
+ if (taskCofig != nil ) {
224
+ if (!taskCofig.reportedBegin ) {
225
+ [self sendEventWithName: @" downloadBegin" body: @{@" id" : taskCofig.id , @" expectedBytes" : [NSNumber numberWithLongLong: totalBytesExpectedToWrite]}];
226
+ urlToConfigMap[downloadTask.currentRequest.URL.absoluteString] = taskCofig;
227
+ [[NSUserDefaults standardUserDefaults ] setObject: [self serialize: urlToConfigMap] forKey: URL_TO_CONFIG_MAP_KEY];
228
+ taskCofig.reportedBegin = YES ;
229
+ }
230
+
231
+ NSNumber *prevPercent = idToPercentMap[taskCofig.id ];
232
+ NSNumber *percent = [NSNumber numberWithFloat: (float )totalBytesWritten/(float )totalBytesExpectedToWrite];
233
+ if ([percent floatValue ] - [prevPercent floatValue ] > 0 .01f ) {
234
+ progressReports[taskCofig.id ] = @{@" id" : taskCofig.id , @" written" : [NSNumber numberWithLongLong: totalBytesWritten], @" total" : [NSNumber numberWithLongLong: totalBytesExpectedToWrite], @" percent" : percent};
235
+ idToPercentMap[taskCofig.id ] = percent;
236
+ }
237
+
238
+ NSDate *now = [[NSDate alloc ] init ];
239
+ if ([now timeIntervalSinceDate: lastProgressReport] > 1.5 && progressReports.count > 0 ) {
240
+ if (self.bridge ) {
241
+ [self sendEventWithName: @" downloadProgress" body: [progressReports allValues ]];
242
+ }
243
+ lastProgressReport = now;
244
+ [progressReports removeAllObjects ];
239
245
}
240
- lastProgressReport = now;
241
- [progressReports removeAllObjects ];
242
246
}
243
247
}
244
248
}
0 commit comments