1// Copyright 2015-present 650 Industries. All rights reserved. 2 3#import <ExpoFileSystem/EXSessionDownloadTaskDelegate.h> 4#import <ExpoFileSystem/NSData+EXFileSystem.h> 5 6@interface EXSessionDownloadTaskDelegate () 7 8@property (strong, nonatomic) NSURL *localUrl; 9@property (nonatomic) BOOL shouldCalculateMd5; 10 11@end 12 13@implementation EXSessionDownloadTaskDelegate 14 15- (nonnull instancetype)initWithResolve:(EXPromiseResolveBlock)resolve 16 reject:(EXPromiseRejectBlock)reject 17 localUrl:(NSURL *)localUrl 18 shouldCalculateMd5:(BOOL)shouldCalculateMd5 19{ 20 if (self = [super initWithResolve:resolve reject:reject]) 21 { 22 _localUrl = localUrl; 23 _shouldCalculateMd5 = shouldCalculateMd5; 24 } 25 return self; 26} 27 28- (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didFinishDownloadingToURL:(NSURL *)location 29{ 30 NSError *error; 31 NSFileManager *fileManager = [NSFileManager defaultManager]; 32 if ([fileManager fileExistsAtPath:_localUrl.path]) { 33 [fileManager removeItemAtURL:_localUrl error:&error]; 34 if (error) { 35 self.reject(@"ERR_FILESYSTEM_CANNOT_REMOVE", 36 [NSString stringWithFormat:@"Unable to remove file from local URI: '%@'", error.description], 37 error); 38 return; 39 } 40 } 41 42 [fileManager moveItemAtURL:location toURL:_localUrl error:&error]; 43 if (error) { 44 self.reject(@"ERR_FILESYSTEM_CANNOT_SAVE", 45 [NSString stringWithFormat:@"Unable to save file to local URI: '%@'", error.description], 46 error); 47 return; 48 } 49 50 self.resolve([self parseServerResponse:downloadTask.response]); 51} 52 53- (NSDictionary *)parseServerResponse:(NSURLResponse *)response 54{ 55 NSMutableDictionary *result = [[super parseServerResponse:response] mutableCopy]; 56 result[@"uri"] = _localUrl.absoluteString; 57 if (_shouldCalculateMd5) { 58 NSData *data = [NSData dataWithContentsOfURL:_localUrl]; 59 result[@"md5"] = [data md5String]; 60 } 61 return result; 62} 63 64@end 65