// // RQDownloadModel.m // TEST // // Created by 张嵘 on 2018/10/22. // Copyright © 2018 张嵘. All rights reserved. // #import "RQDownloadModel.h" #import "RQDownloadHeader.h" @implementation RQDownloadModel - (instancetype)initWithFMResultSet:(FMResultSet *)resultSet { if (!resultSet) return nil; _vid = [NSString stringWithFormat:@"%@", [resultSet objectForColumn:@"vid"]]; _subject = [NSString stringWithFormat:@"%@", [resultSet objectForColumn:@"subject"]]; _urlString = [NSString stringWithFormat:@"%@", [resultSet objectForColumn:@"urlString"]]; _title = [NSString stringWithFormat:@"%@", [resultSet objectForColumn:@"title"]]; _imageUrl = [NSString stringWithFormat:@"%@", [resultSet objectForColumn:@"imageUrl"]]; _content = [NSString stringWithFormat:@"%@", [resultSet objectForColumn:@"content"]]; _fileName = [NSString stringWithFormat:@"%@", [resultSet objectForColumn:@"fileName"]]; _resumeData = [resultSet dataForColumn:@"resumeData"]; _fileTotalSize = [[resultSet objectForColumn:@"fileTotalSize"] integerValue]; _fileDownloadSize = [[resultSet objectForColumn:@"fileDownloadSize"] integerValue]; _progress = [[resultSet objectForColumn:@"progress"] floatValue]; _status = [[resultSet objectForColumn:@"status"] integerValue]; _statusText = [NSString stringWithFormat:@"%@", [resultSet objectForColumn:@"statusText"]]; _lastSpeedTime = [[resultSet objectForColumn:@"lastSpeedTime"] integerValue]; _intervalFileSize = [[resultSet objectForColumn:@"intervalFileSize"] integerValue]; _lastStateTime = [[resultSet objectForColumn:@"lastStateTime"] integerValue]; _destinationPath = [NSString stringWithFormat:@"%@",[resultSet objectForColumn:@"destinationPath"]]; return self; } - (NSString *)vid { if (!_vid) { _vid = [NSString stringWithFormat:@"科目%@-%@--%@",_subject,_videoId,_title]; } return _vid; } - (NSString *)fileName{ if (!_fileName) { NSTimeInterval timeInterval = [[NSDate date]timeIntervalSince1970]; //解决多个任务同时开始时 文件重名问题 NSString *timeStr = [NSString stringWithFormat:@"%.6f",timeInterval]; timeStr = [timeStr stringByReplacingOccurrencesOfString:@"." withString:@"_"]; _fileName = [NSString stringWithFormat:@"%@--%@",_title? :@"无文件名",timeStr]; } return _fileName; } - (NSString *)destinationPath { _destinationPath = [[[NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingString:self.fileName] stringByAppendingString:self.fileFormat]; return _destinationPath; } - (NSString *)fileFormat{ if (!_fileFormat && _urlString) { NSArray *urlArr = [_urlString componentsSeparatedByString:@"."]; if (urlArr && urlArr.count>1) { self.fileFormat = [@"." stringByAppendingString:[urlArr lastObject]]; } } return _fileFormat; } - (void)setProgress:(CGFloat)progress { if (_progress != progress) { _progress = progress; } if (self.progressChanged) { self.progressChanged(self); } } - (void)setStatus:(RQDownloadStatus)status { if (_status != status) { _status = status; [self setStatusTextWith:_status]; if (self.statusChanged) { self.statusChanged(self); } } } - (void)setUrlString:(NSString *)urlString { _urlString = urlString; NSArray *urlArr = [_urlString componentsSeparatedByString:@"."]; if (urlArr && urlArr.count>1) { self.fileFormat = [@"." stringByAppendingString:[urlArr lastObject]]; } } - (void)setStatusTextWith:(RQDownloadStatus)status{ _status = status; NSLog(@"%@%@==%@",self.fileName,self.fileFormat,self.statusText); } - (NSString *)statusText { switch (self.status) { case RQDownloadStatus_None: { return @"未缓存"; } case RQDownloadStatus_Running: { return _statusText? : @"正在下载"; } case RQDownloadStatus_Suspended: { return @"暂停下载"; } case RQDownloadStatus_Failed: { return @"下载失败"; } case RQDownloadStatus_Cancel: { return @"取消下载"; } case RQDownloadStatus_Waiting: { return @"等待下载"; } case RQDownloadStatus_Completed: { return @"下载完成"; } default: { return @"未缓存"; } } } + (NSArray *)mj_ignoredCodingPropertyNames { return @[@"statusChanged",@"progressChanged",@"stream",@"operation"]; } - (NSUInteger)fileDownloadSize { // 获取文件下载长度 NSInteger fileDownloadSize = [[[NSFileManager defaultManager] attributesOfItemAtPath:self.destinationPath error:nil][NSFileSize] integerValue]; _fileDownloadSize = fileDownloadSize; return _fileDownloadSize; } - (NSOutputStream *)stream { if (!_stream) { _stream = [NSOutputStream outputStreamToFileAtPath:self.destinationPath append:YES]; } return _stream; } - (BOOL)isFinished { return (self.fileTotalSize == self.fileDownloadSize) && (self.fileTotalSize != 0); } @end