@@ -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