123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162 |
- //
- // 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
|