Files
RyukGram/src/Downloader/Manager.m
T

75 lines
2.8 KiB
Objective-C

#import "Manager.h"
@implementation SCIDownloadManager
- (instancetype)initWithDelegate:(id<SCIDownloadDelegateProtocol>)downloadDelegate {
self = [super init];
if (self) {
self.delegate = downloadDelegate;
}
return self;
}
- (void)downloadFileWithURL:(NSURL *)url fileExtension:(NSString *)fileExtension {
// Properties
self.session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration] delegate:self delegateQueue:nil];
self.task = [self.session downloadTaskWithURL:url];
// Default to jpg if no other reasonable length extension is provided
self.fileExtension = [fileExtension length] >= 3 ? fileExtension : @"jpg";
[self.task resume];
[self.delegate downloadDidStart];
}
- (void)cancelDownload {
[self.task cancel];
[self.delegate downloadDidCancel];
}
// URLSession methods
- (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didWriteData:(int64_t)bytesWritten totalBytesWritten:(int64_t)totalBytesWritten totalBytesExpectedToWrite:(int64_t)totalBytesExpectedToWrite {
NSLog(@"Task wrote %lld bytes of %lld bytes", bytesWritten, totalBytesExpectedToWrite);
float progress = (float)totalBytesWritten / (float)totalBytesExpectedToWrite;
[self.delegate downloadDidProgress:progress];
}
- (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didFinishDownloadingToURL:(NSURL *)location {
// Move downloaded file to cache directory
NSURL *finalLocation = [self moveFileToCacheDir:location];
[self.delegate downloadDidFinishWithFileURL:finalLocation];
}
- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error {
NSLog(@"Task completed with error: %@", error);
[self.delegate downloadDidFinishWithError:error];
}
// Rename downloaded file & move from documents dir -> cache dir
- (NSURL *)moveFileToCacheDir:(NSURL *)oldPath {
NSFileManager *fileManager = [NSFileManager defaultManager];
NSString *cacheDirectoryPath = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES).firstObject;
NSURL *newPath = [[NSURL fileURLWithPath:cacheDirectoryPath] URLByAppendingPathComponent:[NSString stringWithFormat:@"%@.%@", NSUUID.UUID.UUIDString, self.fileExtension]];
NSLog(@"[SCInsta] Download Handler: Moving file from: %@ to: %@", oldPath.absoluteString, newPath.absoluteString);
// Move file to cache directory
NSError *fileMoveError;
[fileManager moveItemAtURL:oldPath toURL:newPath error:&fileMoveError];
if (fileMoveError) {
NSLog(@"[SCInsta] Download Handler: Error while moving file: %@", oldPath.absoluteString);
NSLog(@"[SCInsta] Download Handler: %@", fileMoveError);
}
return newPath;
}
@end