Skip to content
This repository was archived by the owner on Feb 27, 2022. It is now read-only.

Commit 0c47311

Browse files
author
Elad Gil
committed
iOS: use taskIdentifier instead of the task's pointer as a key for the config map, this is much more stable as the pointer values might change
1 parent 9533a85 commit 0c47311

File tree

1 file changed

+9
-8
lines changed

1 file changed

+9
-8
lines changed

ios/RNBackgroundDownloader.m

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ @implementation RNBackgroundDownloader {
1717
NSURLSession *urlSession;
1818
NSURLSessionConfiguration *sessionConfig;
1919
NSMutableDictionary<NSString *, RNBGDTaskConfig *> *urlToConfigMap;
20-
NSMutableDictionary<NSURLSessionTask *, RNBGDTaskConfig *> *taskToConfigMap;
20+
NSMutableDictionary<NSNumber *, RNBGDTaskConfig *> *taskToConfigMap;
2121
NSMutableDictionary<NSString *, NSURLSessionDownloadTask *> *idToTaskMap;
2222
NSMutableDictionary<NSString *, NSData *> *idToResumeDataMap;
2323
NSMutableDictionary<NSString *, NSNumber *> *idToPercentMap;
@@ -81,8 +81,9 @@ - (void)lazyInitSession {
8181
}
8282

8383
- (void)removeTaskFromMap: (NSURLSessionTask *)task {
84-
RNBGDTaskConfig *taskConfig = taskToConfigMap[task];
85-
[taskToConfigMap removeObjectForKey:task];
84+
NSNumber *taskId = @(task.taskIdentifier);
85+
RNBGDTaskConfig *taskConfig = taskToConfigMap[taskId];
86+
[taskToConfigMap removeObjectForKey:taskId];
8687
[urlToConfigMap removeObjectForKey:task.currentRequest.URL.absoluteString];
8788
[[NSUserDefaults standardUserDefaults] setObject:[self serialize: urlToConfigMap] forKey:URL_TO_CONFIG_MAP_KEY];
8889
if (taskConfig) {
@@ -125,7 +126,7 @@ + (void)setCompletionHandlerWithIdentifier: (NSString *)identifier completionHan
125126

126127
NSURLSessionDownloadTask *task = [urlSession downloadTaskWithRequest:request];
127128
RNBGDTaskConfig *taskConfig = [[RNBGDTaskConfig alloc] initWithDictionary: @{@"id": identifier, @"destination": destination}];
128-
taskToConfigMap[task] = taskConfig;
129+
taskToConfigMap[@(task.taskIdentifier)] = taskConfig;
129130
idToTaskMap[identifier] = task;
130131
idToPercentMap[identifier] = @0.0;
131132

@@ -179,7 +180,7 @@ + (void)setCompletionHandlerWithIdentifier: (NSString *)identifier completionHan
179180
@"percent": percent
180181
}];
181182
taskConfig.reportedBegin = YES;
182-
taskToConfigMap[task] = taskConfig;
183+
taskToConfigMap[@(task.taskIdentifier)] = taskConfig;
183184
idToTaskMap[taskConfig.id] = task;
184185
idToPercentMap[taskConfig.id] = percent;
185186
} else {
@@ -192,7 +193,7 @@ + (void)setCompletionHandlerWithIdentifier: (NSString *)identifier completionHan
192193

193194
#pragma mark - NSURLSessionDownloadDelegate methods
194195
- (void)URLSession:(nonnull NSURLSession *)session downloadTask:(nonnull NSURLSessionDownloadTask *)downloadTask didFinishDownloadingToURL:(nonnull NSURL *)location {
195-
RNBGDTaskConfig *taskCofig = taskToConfigMap[downloadTask];
196+
RNBGDTaskConfig *taskCofig = taskToConfigMap[@(downloadTask.taskIdentifier)];
196197
if (taskCofig != nil) {
197198
NSFileManager *fileManager = [NSFileManager defaultManager];
198199
NSURL *destURL = [NSURL fileURLWithPath:taskCofig.destination];
@@ -215,7 +216,7 @@ - (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTas
215216
}
216217

217218
- (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didWriteData:(int64_t)bytesWritten totalBytesWritten:(int64_t)totalBytesWritten totalBytesExpectedToWrite:(int64_t)totalBytesExpectedToWrite {
218-
RNBGDTaskConfig *taskCofig = taskToConfigMap[downloadTask];
219+
RNBGDTaskConfig *taskCofig = taskToConfigMap[@(downloadTask.taskIdentifier)];
219220
if (taskCofig != nil) {
220221
if (!taskCofig.reportedBegin) {
221222
[self sendEventWithName:@"downloadBegin" body:@{@"id": taskCofig.id, @"expectedBytes": [NSNumber numberWithLongLong: totalBytesExpectedToWrite]}];
@@ -243,7 +244,7 @@ - (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTas
243244
}
244245

245246
- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error {
246-
RNBGDTaskConfig *taskCofig = taskToConfigMap[task];
247+
RNBGDTaskConfig *taskCofig = taskToConfigMap[@(task.taskIdentifier)];
247248
if (error != nil && error.code != -999 && taskCofig != nil) {
248249
if (self.bridge) {
249250
[self sendEventWithName:@"downloadFailed" body:@{@"id": taskCofig.id, @"error": [error localizedDescription]}];

0 commit comments

Comments
 (0)