Skip to content

Commit fc41497

Browse files
author
Julian Locke
authored
Merge pull request #354 from dropbox/call-completion-handler-batch-upload
Call completion handler after successful batch upload
2 parents 21dbcd9 + befc38e commit fc41497

File tree

1 file changed

+35
-79
lines changed

1 file changed

+35
-79
lines changed

Source/ObjectiveDropboxOfficial/Shared/Handwritten/Resources/DBCustomRoutes.m

Lines changed: 35 additions & 79 deletions
Original file line numberDiff line numberDiff line change
@@ -319,74 +319,28 @@ - (void)appendFileChunk:(DBBatchUploadData *)uploadData
319319
[uploadData.taskStorage addUploadTask:task];
320320
}
321321

322-
- (void)queryJobStatus:(DBBatchUploadData *)uploadData asyncJobId:(NSString *)asyncJobId retryCount:(int)retryCount {
323-
[[self uploadSessionFinishBatchCheck:asyncJobId]
324-
setResponseBlock:^(DBFILESUploadSessionFinishBatchJobStatus *result, DBASYNCPollError *routeError,
325-
DBRequestError *error) {
326-
if (result) {
327-
if ([result isInProgress]) {
328-
sleep(1);
329-
if (retryCount <= timeoutInSec) {
330-
[self queryJobStatus:uploadData asyncJobId:asyncJobId retryCount:retryCount + 1];
331-
} else {
332-
NSString *errorMessage =
333-
[NSString stringWithFormat:@"Result polling took > %d seconds. Timing out.", timeoutInSec];
334-
NSMutableDictionary *userInfo = [NSMutableDictionary new];
335-
userInfo[NSUnderlyingErrorKey] = errorMessage;
336-
NSError *timeoutError =
337-
[[NSError alloc] initWithDomain:NSURLErrorDomain code:NSURLErrorTimedOut userInfo:userInfo];
338-
[uploadData.queue addOperationWithBlock:^{
339-
uploadData.responseBlock(nil, nil, [[DBRequestError alloc] initAsClientError:timeoutError],
340-
uploadData.fileUrlsToRequestErrors);
341-
}];
342-
}
343-
} else if ([result isComplete]) {
344-
[uploadData.queue addOperationWithBlock:^{
345-
NSArray<DBFILESUploadSessionFinishBatchResultEntry *> *completeResult = result.complete.entries;
346-
347-
// create reverse lookup
348-
NSMutableDictionary<NSString *, NSURL *> *dropboxFilePathToNSURL = [NSMutableDictionary new];
349-
for (NSURL *fileUrl in uploadData.fileUrlsToCommitInfo) {
350-
DBFILESCommitInfo *commitInfo = uploadData.fileUrlsToCommitInfo[fileUrl];
351-
dropboxFilePathToNSURL[commitInfo.path] = fileUrl;
352-
}
322+
- (void)finishBatch:(DBBatchUploadData *)uploadData resultEntries:(NSArray<DBFILESUploadSessionFinishBatchResultEntry *> *)resultEntries {
323+
[uploadData.queue addOperationWithBlock:^{
324+
// create reverse lookup
325+
NSMutableDictionary<NSString *, NSURL *> *dropboxFilePathToNSURL = [NSMutableDictionary new];
326+
for (NSURL *fileUrl in uploadData.fileUrlsToCommitInfo) {
327+
DBFILESCommitInfo *commitInfo = uploadData.fileUrlsToCommitInfo[fileUrl];
328+
dropboxFilePathToNSURL[commitInfo.path] = fileUrl;
329+
}
353330

354-
NSMutableDictionary<NSURL *, DBFILESUploadSessionFinishBatchResultEntry *> *fileUrlsToBatchResultEntries =
355-
[NSMutableDictionary new];
331+
NSMutableDictionary<NSURL *, DBFILESUploadSessionFinishBatchResultEntry *> *fileUrlsToBatchResultEntries =
332+
[NSMutableDictionary new];
356333

357-
int index = 0;
358-
for (DBFILESUploadSessionFinishArg *finishArg in uploadData.finishArgs) {
359-
NSString *path = finishArg.commit.path;
360-
DBFILESUploadSessionFinishBatchResultEntry *resultEntry = completeResult[index];
361-
fileUrlsToBatchResultEntries[dropboxFilePathToNSURL[path]] = resultEntry;
362-
index++;
363-
}
334+
int index = 0;
335+
for (DBFILESUploadSessionFinishArg *finishArg in uploadData.finishArgs) {
336+
NSString *path = finishArg.commit.path;
337+
DBFILESUploadSessionFinishBatchResultEntry *resultEntry = resultEntries[index];
338+
fileUrlsToBatchResultEntries[dropboxFilePathToNSURL[path]] = resultEntry;
339+
index++;
340+
}
364341

365-
uploadData.responseBlock(fileUrlsToBatchResultEntries, nil, nil, uploadData.fileUrlsToRequestErrors);
366-
}];
367-
}
368-
} else if (!routeError) {
369-
if ([error isRateLimitError]) {
370-
DBRequestRateLimitError *rateLimitError = [error asRateLimitError];
371-
double backoffInSeconds = [rateLimitError.backoff doubleValue];
372-
dispatch_time_t delayTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(backoffInSeconds * NSEC_PER_SEC));
373-
374-
// retry after backoff time
375-
dispatch_after(delayTime, dispatch_get_main_queue(), ^(void) {
376-
[self queryJobStatus:uploadData asyncJobId:asyncJobId retryCount:retryCount];
377-
});
378-
} else {
379-
[uploadData.queue addOperationWithBlock:^{
380-
uploadData.responseBlock(nil, nil, error, uploadData.fileUrlsToRequestErrors);
381-
}];
382-
}
383-
} else {
384-
[uploadData.queue addOperationWithBlock:^{
385-
uploadData.responseBlock(nil, routeError, error, uploadData.fileUrlsToRequestErrors);
386-
}];
387-
}
388-
}
389-
queue:uploadData.pollingQueue];
342+
uploadData.responseBlock(fileUrlsToBatchResultEntries, nil, nil, uploadData.fileUrlsToRequestErrors);
343+
}];
390344
}
391345

392346
- (NSUInteger)endBytesWithFileSize:(NSUInteger)fileSize startBytes:(NSUInteger)startBytes {
@@ -407,24 +361,26 @@ - (void)batchFinishUponCompletion:(DBBatchUploadData *)uploadData {
407361
}
408362

409363
NSMutableArray<DBFILESUploadSessionFinishArg *> *sortedFinishArgs =
410-
[[uploadData.finishArgs sortedArrayUsingComparator:^NSComparisonResult(id a, id b) {
411-
DBFILESUploadSessionFinishArg *first = (DBFILESUploadSessionFinishArg *)a;
412-
DBFILESUploadSessionFinishArg *second = (DBFILESUploadSessionFinishArg *)b;
413-
return [first.commit.path compare:second.commit.path];
414-
}] mutableCopy];
364+
[[uploadData.finishArgs sortedArrayUsingComparator:^NSComparisonResult(id a, id b) {
365+
DBFILESUploadSessionFinishArg *first = (DBFILESUploadSessionFinishArg *)a;
366+
DBFILESUploadSessionFinishArg *second = (DBFILESUploadSessionFinishArg *)b;
367+
return [first.commit.path compare:second.commit.path];
368+
}] mutableCopy];
415369

416370
uploadData.finishArgs = sortedFinishArgs;
417371

418372
[[self uploadSessionFinishBatchV2:sortedFinishArgs]
419-
setResponseBlock:^(DBFILESUploadSessionFinishBatchResult *_Nullable result, DBNilObject *_Nullable routeError,
420-
DBRequestError *_Nullable networkError) {
421-
if (!result || routeError) {
422-
[uploadData.queue addOperationWithBlock:^{
423-
uploadData.responseBlock(nil, nil, networkError, uploadData.fileUrlsToRequestErrors);
424-
}];
425-
}
426-
}
427-
queue:uploadData.pollingQueue];
373+
setResponseBlock:^(DBFILESUploadSessionFinishBatchResult *_Nullable result, DBNilObject *_Nullable routeError,
374+
DBRequestError *_Nullable networkError) {
375+
if (!result || routeError) {
376+
[uploadData.queue addOperationWithBlock:^{
377+
uploadData.responseBlock(nil, nil, networkError, uploadData.fileUrlsToRequestErrors);
378+
}];
379+
} else {
380+
[self finishBatch:uploadData resultEntries:result.entries];
381+
}
382+
}
383+
queue:uploadData.pollingQueue];
428384
});
429385
}
430386

0 commit comments

Comments
 (0)