|
@@ -0,0 +1,659 @@
|
|
|
+//
|
|
|
+// nasDownloadFileManager.m
|
|
|
+// 双子星云手机
|
|
|
+//
|
|
|
+// Created by xd h on 2024/8/5.
|
|
|
+//
|
|
|
+
|
|
|
+#import "nasDownloadFileManager.h"
|
|
|
+
|
|
|
+@implementation nasDownloadFileManager
|
|
|
+static nasDownloadFileManager * cur_nasDownloadFileManager = nil;
|
|
|
++(nasDownloadFileManager *)shareInstance;
|
|
|
+{
|
|
|
+ static dispatch_once_t onceToken;
|
|
|
+ dispatch_once(&onceToken, ^{
|
|
|
+ cur_nasDownloadFileManager = [[nasDownloadFileManager alloc] init];
|
|
|
+
|
|
|
+ });
|
|
|
+
|
|
|
+ return cur_nasDownloadFileManager;
|
|
|
+}
|
|
|
+
|
|
|
+- (id)init
|
|
|
+{
|
|
|
+ self = [super init];
|
|
|
+
|
|
|
+ if (self) {
|
|
|
+ //[self initManager];
|
|
|
+ [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(downloadTaskFinishedNoti:) name:nasDownloadTaskExeEnd object:nil];
|
|
|
+ [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(downloadTaskFinishedNoti:) name:nasDownloadTaskExeError object:nil];
|
|
|
+
|
|
|
+ [self initDownloadManagerFun];
|
|
|
+ }
|
|
|
+
|
|
|
+ return self;
|
|
|
+}
|
|
|
+
|
|
|
+- (void)initDownloadManagerFun
|
|
|
+{
|
|
|
+ [nasDownloadManager shareManager].uid = [connectDeviceManager shareInstance].DeviceThirdIdMod.data.sn;
|
|
|
+ [nasDownloadManager shareManager].maxDownLoadCount = 2;
|
|
|
+
|
|
|
+ [self delItemInDoneTaskFun];
|
|
|
+}
|
|
|
+
|
|
|
+- (NSMutableArray*)downLoadFileModelDataArr
|
|
|
+{
|
|
|
+ if(_databaseArr && _databaseArr.count >=3){
|
|
|
+ return _databaseArr[0];
|
|
|
+ }
|
|
|
+
|
|
|
+ return [NSMutableArray new];
|
|
|
+}
|
|
|
+#pragma mark 删除已经完成和删除文件的任务
|
|
|
+- (void)delItemInDoneTaskFun
|
|
|
+{
|
|
|
+// NSArray *allDownItemArr = [YCDownloadManager downloadList];
|
|
|
+//
|
|
|
+// for (YCDownloadItem *item in allDownItemArr) {
|
|
|
+// if (item.downloadStatus == YCDownloadStatusFinished) {
|
|
|
+// NSString *savePath = item.savePath;
|
|
|
+//
|
|
|
+// if (![[NSFileManager defaultManager] fileExistsAtPath:savePath]){
|
|
|
+// [YCDownloadManager stopDownloadWithItem:item];
|
|
|
+// }
|
|
|
+// }
|
|
|
+// }
|
|
|
+}
|
|
|
+
|
|
|
+#pragma mark 删除多余的任务 比如数据删除了 但是任务还在
|
|
|
+- (void)checkDownloadTaskFun{
|
|
|
+// NSArray *allDownItemArr = [YCDownloadManager downloadList];
|
|
|
+//
|
|
|
+// NSArray* downloadingArr = nil;
|
|
|
+// NSArray* downloadingFail = nil;
|
|
|
+// if(_databaseArr && _databaseArr.count == 3){
|
|
|
+// downloadingArr = _databaseArr[0];
|
|
|
+// downloadingFail = _databaseArr[2];
|
|
|
+// }
|
|
|
+//
|
|
|
+// for (YCDownloadItem *item in allDownItemArr) {
|
|
|
+//
|
|
|
+// BOOL isNeedStopType = YES;
|
|
|
+//
|
|
|
+// //解码
|
|
|
+// NSString * urlString = [item.downloadURL stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
|
|
|
+//
|
|
|
+// if(downloadingArr && downloadingArr.count > 0){
|
|
|
+// for (couldPhoneFileModel*dataModel in downloadingArr) {
|
|
|
+// if([urlString isEqualToString:dataModel.fileUrl]){
|
|
|
+// isNeedStopType = NO;
|
|
|
+// }
|
|
|
+// }
|
|
|
+// }
|
|
|
+//
|
|
|
+// if(downloadingFail && downloadingFail.count > 0){
|
|
|
+// for (couldPhoneFileModel*dataModel in downloadingFail) {
|
|
|
+// if([urlString isEqualToString:dataModel.fileUrl]){
|
|
|
+// if(item.downloadedSize >0){
|
|
|
+// isNeedStopType = NO;
|
|
|
+// }
|
|
|
+// }
|
|
|
+// }
|
|
|
+// }
|
|
|
+//
|
|
|
+// if(isNeedStopType){
|
|
|
+// HLog(@"停止多的下载任务:%@",item.downloadURL);
|
|
|
+// [YCDownloadManager stopDownloadWithItem:item];
|
|
|
+// }
|
|
|
+//
|
|
|
+// }
|
|
|
+}
|
|
|
+
|
|
|
+//添加保存记录
|
|
|
+- (void)addNasDownloadRecordFunBy:(NSArray*)arr complete:(custom_complete_Arr)complete{
|
|
|
+ if(arr && arr.count >0 ){
|
|
|
+ //1.排重处理
|
|
|
+ [self getDataInDatabaseFun:NO complete:^(NSMutableArray * _Nonnull Arr) {
|
|
|
+ [self filterDownloadingTaskFunWithNewTaskArr:arr complete:complete];
|
|
|
+ }];
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+- (void)filterDownloadingTaskFunWithNewTaskArr:(NSArray*)taskArr complete:(custom_complete_Arr)complete
|
|
|
+{
|
|
|
+ NSMutableArray *addTaskArr = [NSMutableArray new];
|
|
|
+
|
|
|
+ NSMutableArray * downloadingArr = [NSMutableArray new];
|
|
|
+ if(_databaseArr && _databaseArr.count == 3){
|
|
|
+ downloadingArr = _databaseArr[0];
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ for (couldPhoneFileModel*model in taskArr) {
|
|
|
+ BOOL canAdd = YES;
|
|
|
+
|
|
|
+ if(downloadingArr.count > 0){
|
|
|
+ for (couldPhoneFileModel*downloadingModel in downloadingArr) {
|
|
|
+ if([downloadingModel.fileUrl isEqualToString:model.fileUrl]){
|
|
|
+ canAdd = NO;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if(canAdd){
|
|
|
+ model.bg_tableName = nas_box_download_tableName;
|
|
|
+ [addTaskArr addObject:model];
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if(addTaskArr.count >0){
|
|
|
+ KWeakSelf
|
|
|
+ //[couldPhoneFileModel bg_saveOrUpdateArray:arr];
|
|
|
+ [couldPhoneFileModel bg_saveOrUpdateArrayAsync:addTaskArr complete:^(BOOL isSuccess) {
|
|
|
+ //保存完成重新读取数据库 这样下载中的任务才会完整
|
|
|
+ [weakSelf getDataInDatabaseFun:YES complete:^(NSMutableArray * _Nonnull Arr) {
|
|
|
+ [weakSelf beginDownloadFilesByUrls:addTaskArr];
|
|
|
+ complete(weakSelf.databaseArr);
|
|
|
+ }];
|
|
|
+
|
|
|
+ }];
|
|
|
+ }
|
|
|
+ else{//任务下载中
|
|
|
+ complete(_databaseArr);
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+#pragma mark 读取数据库数据
|
|
|
+- (void)getDataInDatabaseFun:(BOOL)isReGet complete:(custom_complete_Arr)complete
|
|
|
+{
|
|
|
+ if(_databaseArr && _databaseArr.count == 3 && !isReGet){
|
|
|
+ complete(_databaseArr);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ if(!_databaseArr)
|
|
|
+ {
|
|
|
+ _databaseArr = [NSMutableArray new];
|
|
|
+ }
|
|
|
+
|
|
|
+ KWeakSelf
|
|
|
+ //dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0), ^{
|
|
|
+// NSLock *lock = [NSLock new];
|
|
|
+// [lock lock];
|
|
|
+ [couldPhoneFileModel bg_findAsync:nas_box_download_tableName limit:0 orderBy:nil desc:YES complete:^(NSArray * _Nullable array) {
|
|
|
+ NSMutableArray *failArr = [NSMutableArray new];
|
|
|
+ NSMutableArray *doneArr = [NSMutableArray new];
|
|
|
+ NSMutableArray *otherArr = [NSMutableArray new];
|
|
|
+ if(array && array.count >0){
|
|
|
+ for (couldPhoneFileModel * curModel in array) {
|
|
|
+
|
|
|
+ if(curModel.curDownloadStateType == downloadStateFail){
|
|
|
+ [failArr addObject:curModel];
|
|
|
+ }
|
|
|
+ else if(curModel.curDownloadStateType == downloadStateDone){
|
|
|
+ [doneArr addObject:curModel];
|
|
|
+ }
|
|
|
+ else{
|
|
|
+ [otherArr addObject:curModel];
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ NSLock *lock = [NSLock new];
|
|
|
+ [lock lock];
|
|
|
+
|
|
|
+ NSMutableArray *newArr = [NSMutableArray new];
|
|
|
+ [newArr addObject:otherArr];
|
|
|
+ [newArr addObject:doneArr];
|
|
|
+ [newArr addObject:failArr];
|
|
|
+ self->_databaseArr = newArr;
|
|
|
+
|
|
|
+ [lock unlock];
|
|
|
+
|
|
|
+ if(isReGet){
|
|
|
+ [self checkDownloadTaskFun];
|
|
|
+ }
|
|
|
+
|
|
|
+ complete(self->_databaseArr);
|
|
|
+ }];
|
|
|
+ // [lock unlock];
|
|
|
+ //});
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
+- (void)handleDatabaseArrByDelete:(couldPhoneFileModel*)delModel
|
|
|
+{
|
|
|
+ if(_databaseArr && _databaseArr.count == 3 ){
|
|
|
+
|
|
|
+ if(delModel.curDownloadStateType == downloadStateDone)
|
|
|
+ {
|
|
|
+ NSMutableArray *arr = _databaseArr[1];
|
|
|
+ [self deteleModel:delModel inArr:arr];
|
|
|
+ }
|
|
|
+ else if(delModel.curDownloadStateType == downloadStateFail){
|
|
|
+ NSMutableArray *arr = _databaseArr[2];
|
|
|
+ [self deteleModel:delModel inArr:arr];
|
|
|
+ }
|
|
|
+ else{
|
|
|
+ NSMutableArray *arr = _databaseArr[0];
|
|
|
+ [self deteleModel:delModel inArr:arr];
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+#pragma mark 处理删除内存数据
|
|
|
+- (void)deteleModel:(couldPhoneFileModel*)delModel inArr:(NSMutableArray*)delArr{
|
|
|
+
|
|
|
+ for (couldPhoneFileModel *dataModel in delArr) {
|
|
|
+ if(delModel.bg_id.integerValue == dataModel.bg_id.integerValue){
|
|
|
+ [delArr removeObject:dataModel];
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
+#pragma mark 删除本地数据库记录
|
|
|
+- (void)deleteBoxSaveFileRecordBy:(NSMutableArray *)delArr{
|
|
|
+
|
|
|
+ NSMutableArray *curDelArr = [NSMutableArray arrayWithArray:delArr];
|
|
|
+ for (couldPhoneFileModel *dataModel in curDelArr) {
|
|
|
+
|
|
|
+ //1.内存数据删除
|
|
|
+ [self handleDatabaseArrByDelete:dataModel];
|
|
|
+
|
|
|
+ //2.删除数据量
|
|
|
+ NSMutableString* where = [[NSMutableString alloc] initWithString:@"where "];
|
|
|
+
|
|
|
+ NSString *curStr = [NSString stringWithFormat:@"%@=%@ ",bg_sqlKey(@"bg_id"),bg_sqlValue(dataModel.bg_id)];
|
|
|
+ [where appendString:curStr];
|
|
|
+
|
|
|
+ [couldPhoneFileModel bg_deleteAsync:nas_box_download_tableName where:where complete:^(BOOL isSuccess) {
|
|
|
+ if(isSuccess){
|
|
|
+
|
|
|
+ }
|
|
|
+ }];
|
|
|
+
|
|
|
+
|
|
|
+ //3.取消下载
|
|
|
+ NSString *urlString = dataModel.fileUrl;
|
|
|
+ NSString *requestURLEncodedString = [urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
|
|
|
+
|
|
|
+ [[nasDownloadManager shareManager] deleteDownloadWithUrl:requestURLEncodedString];
|
|
|
+ }
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+#pragma mark 更新本地数据库记录
|
|
|
+- (void)updataBoxSaveDataInFailBy:(couldPhoneFileModel*)dataModel
|
|
|
+{
|
|
|
+
|
|
|
+ //1.修改数据库
|
|
|
+ if(_databaseArr.count == 3){
|
|
|
+ NSMutableArray *failArr = _databaseArr[2];
|
|
|
+ NSMutableArray *ingArr = _databaseArr[0];
|
|
|
+ for (couldPhoneFileModel* model in failArr) {
|
|
|
+ if (dataModel.bg_id.integerValue == model.bg_id.integerValue) {
|
|
|
+ [failArr removeObject:model];
|
|
|
+ [ingArr addObject:dataModel];
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ [dataModel bg_saveOrUpdateAsync:^(BOOL isSuccess) {
|
|
|
+
|
|
|
+ }];
|
|
|
+}
|
|
|
+
|
|
|
+#pragma mark 开始下载文件
|
|
|
+- (void)beginDownloadFilesByUrls:(NSArray *)urlArr{
|
|
|
+
|
|
|
+// NSMutableArray*arr = [[SGDownloadManager shareManager] getAllOperation];
|
|
|
+// if(arr && arr.count > 0){
|
|
|
+// HLog(@"有任务正在下载");
|
|
|
+// [[SGDownloadManager shareManager] startAllDownloadTask];
|
|
|
+// return;
|
|
|
+// }
|
|
|
+
|
|
|
+ if(urlArr && urlArr.count > 0){
|
|
|
+ NSMutableArray *URLEncodedStringArr = [NSMutableArray new];
|
|
|
+
|
|
|
+ for (NSInteger i= urlArr.count-1; i>=0; i--) {
|
|
|
+ couldPhoneFileModel *fileModel = urlArr[i];
|
|
|
+
|
|
|
+ NSString *urlString = fileModel.fileUrl;
|
|
|
+ NSString *requestURLEncodedString = [urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
|
|
|
+
|
|
|
+// [[mixDownloadManager shareManager] downloadWithURL:[NSURL URLWithString:requestURLEncodedString] complete:^(NSDictionary * _Nonnull respose, NSError * _Nonnull error) {
|
|
|
+// HLog(@"download:%@",respose);
|
|
|
+// }];
|
|
|
+
|
|
|
+ [URLEncodedStringArr addObject:requestURLEncodedString];
|
|
|
+ }
|
|
|
+
|
|
|
+ [[nasDownloadManager shareManager] addDownloadWithURLs:URLEncodedStringArr];
|
|
|
+
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+#pragma mark 下载完成
|
|
|
+- (void)downloadTaskFinishedNoti:(NSNotification *)notification
|
|
|
+{
|
|
|
+ customDownloadOperation *model = notification.userInfo.allValues.firstObject;
|
|
|
+
|
|
|
+ if(!model)return;
|
|
|
+
|
|
|
+ if (model.downloadState == customDownloadStateCompleted) {
|
|
|
+
|
|
|
+ //1.先做数据保存
|
|
|
+ NSDictionary *dataDict = [model downLoadInfoWithFinished:YES];
|
|
|
+ [self saveFileInfoWithDict:dataDict with:model.url];
|
|
|
+
|
|
|
+ [self handldDownloadDoneDataBy:model];
|
|
|
+ }
|
|
|
+ else if (model.downloadState == customDownloadStateFailed){
|
|
|
+ [self handldDownloadFailDataBy:model];
|
|
|
+ }
|
|
|
+
|
|
|
+ dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
|
|
|
+ [[NSNotificationCenter defaultCenter] postNotificationName:nasDownloadTaskFinishedNotification object:model];
|
|
|
+
|
|
|
+ [[webSocketManager shareInstance] NasDownloadTaskFinishedNoti:model];
|
|
|
+ });
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+#pragma mark 下载完成数据回调处理
|
|
|
+- (void)handldDownloadDoneDataBy:(customDownloadOperation*)model
|
|
|
+{
|
|
|
+ //解码
|
|
|
+ NSString * urlString = [model.url stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
|
|
|
+
|
|
|
+ if(_databaseArr && _databaseArr.count == 3 ){
|
|
|
+ NSMutableArray *ingArr = _databaseArr[0];
|
|
|
+ for (couldPhoneFileModel*dataModel in ingArr) {
|
|
|
+ HLog(@"22222222 %@\n%@",urlString,dataModel.fileUrl);
|
|
|
+ if([urlString isEqualToString:dataModel.fileUrl]){
|
|
|
+
|
|
|
+ dataModel.curDownloadStateType = downloadStateDone;
|
|
|
+
|
|
|
+ NSMutableArray *doneArr = _databaseArr[1];
|
|
|
+ [doneArr insertObject:dataModel atIndex:0];
|
|
|
+
|
|
|
+ //更新数据库
|
|
|
+ [dataModel bg_saveOrUpdateAsync:^(BOOL isSuccess) {
|
|
|
+
|
|
|
+ }];
|
|
|
+
|
|
|
+ [self deteleModel:dataModel inArr:ingArr];
|
|
|
+
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+#pragma mark 下载失败数据回调处理
|
|
|
+- (void)handldDownloadFailDataBy:(customDownloadOperation*)model
|
|
|
+{
|
|
|
+ //解码
|
|
|
+ NSString * urlString = [model.url stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
|
|
|
+
|
|
|
+ if(_databaseArr && _databaseArr.count == 3 ){
|
|
|
+ NSMutableArray *ingArr = _databaseArr[0];
|
|
|
+ HLog(@"%@",ingArr)
|
|
|
+ for (couldPhoneFileModel*dataModel in ingArr) {
|
|
|
+ HLog(@"22222222 %@\n%@",urlString,dataModel.fileUrl);
|
|
|
+ if([urlString isEqualToString:dataModel.fileUrl]){
|
|
|
+
|
|
|
+ dataModel.curDownloadStateType = downloadStateFail;
|
|
|
+ dataModel.failMsg = NSLocalizedString(@"File_download_error_404",nil);
|
|
|
+
|
|
|
+ //失败里面添加
|
|
|
+ NSMutableArray *failArr = _databaseArr[2];
|
|
|
+ [failArr insertObject:dataModel atIndex:0];
|
|
|
+
|
|
|
+ //更新数据库
|
|
|
+ [dataModel bg_saveOrUpdateAsync:^(BOOL isSuccess) {
|
|
|
+
|
|
|
+ }];
|
|
|
+
|
|
|
+ [self deteleModel:dataModel inArr:ingArr];
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
+#pragma mark 全部暂停 或者暂停某一个
|
|
|
+- (void)suspendDownloadFileFun:(BOOL)isSuspendAll withModel:(couldPhoneFileModel*)dataModel
|
|
|
+{
|
|
|
+ if(isSuspendAll){//全部暂停
|
|
|
+
|
|
|
+ if (_databaseArr && _databaseArr.count == 3) {
|
|
|
+ NSMutableArray *downloadingArr = _databaseArr[0];
|
|
|
+ for (couldPhoneFileModel*model in downloadingArr) {
|
|
|
+ model.curDownloadStateType = downloadStateSuspend;
|
|
|
+ }
|
|
|
+
|
|
|
+ if(downloadingArr.count > 0){
|
|
|
+ [couldPhoneFileModel bg_saveOrUpdateArrayAsync:downloadingArr complete:^(BOOL isSuccess) {
|
|
|
+
|
|
|
+ }];
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ [[nasDownloadManager shareManager] suspendAllDownloadTask];
|
|
|
+ }
|
|
|
+ else if(dataModel){//暂停指定任务
|
|
|
+ NSString *urlString = dataModel.fileUrl;
|
|
|
+ NSString *requestURLEncodedString = [urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
|
|
|
+ HLog(@"%@",urlString);
|
|
|
+
|
|
|
+ [[nasDownloadManager shareManager] supendDownloadWithUrl:requestURLEncodedString];
|
|
|
+
|
|
|
+ //2.修改状态
|
|
|
+ if (_databaseArr && _databaseArr.count == 3) {
|
|
|
+ NSMutableArray *downloadingArr = _databaseArr[0];
|
|
|
+ for (couldPhoneFileModel*model in downloadingArr) {
|
|
|
+
|
|
|
+ if(model.bg_id.integerValue == dataModel.bg_id.integerValue){
|
|
|
+ model.curDownloadStateType = downloadStateSuspend;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if(downloadingArr.count > 0){
|
|
|
+ [couldPhoneFileModel bg_saveOrUpdateArrayAsync:downloadingArr complete:^(BOOL isSuccess) {
|
|
|
+
|
|
|
+ }];
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+#pragma mark 重新开始下载
|
|
|
+- (void)reDownloadFileFunBy:(NSMutableArray*)arr withAll:(BOOL)isAllType
|
|
|
+{
|
|
|
+
|
|
|
+ if(isAllType){
|
|
|
+ //[[mixDownloadManager shareManager] startAllDownloadTask];
|
|
|
+
|
|
|
+ if (_databaseArr && _databaseArr.count == 3) {
|
|
|
+
|
|
|
+ NSMutableArray *downloadingArr = _databaseArr[0];
|
|
|
+ NSMutableArray *ReverseOrderArr = [NSMutableArray new];
|
|
|
+
|
|
|
+ for (NSInteger i = downloadingArr.count -1; i>=0; i--) {
|
|
|
+ couldPhoneFileModel*model = downloadingArr[i];
|
|
|
+ model.curDownloadStateType = downloadStateUploading;
|
|
|
+ [ReverseOrderArr addObject:model];
|
|
|
+ }
|
|
|
+
|
|
|
+// for (couldPhoneFileModel*model in downloadingArr) {
|
|
|
+// model.downloadBoxStateType = downloadBoxStateDownloadloading;
|
|
|
+// }
|
|
|
+
|
|
|
+ //这里处理重新下载
|
|
|
+ [self beginDownloadFilesByUrls:ReverseOrderArr];
|
|
|
+
|
|
|
+
|
|
|
+ if(downloadingArr.count > 0){
|
|
|
+ [couldPhoneFileModel bg_updateArrayAsync:downloadingArr complete:^(BOOL isSuccess) {
|
|
|
+
|
|
|
+ }];
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else{
|
|
|
+
|
|
|
+ couldPhoneFileModel* dataModel = nil;
|
|
|
+ if(arr && arr.count > 0){
|
|
|
+ dataModel = arr.firstObject;
|
|
|
+
|
|
|
+ //修改数据库状态
|
|
|
+ dataModel.curDownloadStateType = downloadStateUploading;
|
|
|
+ [couldPhoneFileModel bg_saveOrUpdateArrayAsync:@[dataModel] complete:^(BOOL isSuccess) {
|
|
|
+
|
|
|
+ }];
|
|
|
+ }else{
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ NSString *urlString = dataModel.fileUrl;
|
|
|
+ NSString *requestURLEncodedString = [urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
|
|
|
+ HLog(@"%@",urlString);
|
|
|
+
|
|
|
+ [[nasDownloadManager shareManager] startDownLoadWithUrl:requestURLEncodedString];
|
|
|
+
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+#pragma mark 重新开始下载 第一次进去传输列表是用
|
|
|
+- (void)firstReDownloadAllFileFun
|
|
|
+{
|
|
|
+ if (_databaseArr && _databaseArr.count == 3) {
|
|
|
+
|
|
|
+ NSMutableArray *downloadingArr = _databaseArr[0];
|
|
|
+ NSMutableArray *URLEncodedStringArr = [NSMutableArray new];
|
|
|
+
|
|
|
+ for (couldPhoneFileModel*model in downloadingArr) {
|
|
|
+ if(model.curDownloadStateType == downloadStateUploading)
|
|
|
+ {
|
|
|
+ NSString *urlString = model.fileUrl;
|
|
|
+ NSString *requestURLEncodedString = [urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
|
|
|
+ [URLEncodedStringArr addObject:requestURLEncodedString];
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if(URLEncodedStringArr.count > 0){
|
|
|
+ [[nasDownloadManager shareManager] addDownloadWithURLs:URLEncodedStringArr];
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+#pragma mark- download done plist Path
|
|
|
+- (NSString *)getDownloadDonePlistPath {
|
|
|
+ NSString *fileFolder = [customDownloadCacheManager getFullDirector];
|
|
|
+ return [fileFolder stringByAppendingPathComponent:@"nasDownloadDoneInfo.plist"];;
|
|
|
+}
|
|
|
+
|
|
|
+#pragma mark- download done plist
|
|
|
+- (NSMutableDictionary *)getDownloadDownList {
|
|
|
+
|
|
|
+ if (!_downloadDoneList) { // 内存没有
|
|
|
+ _downloadDoneList = [[NSDictionary dictionaryWithContentsOfFile:[self getDownloadDonePlistPath]] mutableCopy]; // 本地加载
|
|
|
+ if (!_downloadDoneList) { // 本地没有,分配内存
|
|
|
+ _downloadDoneList = [NSMutableDictionary dictionary];
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return _downloadDoneList;
|
|
|
+}
|
|
|
+
|
|
|
+/** 增加配置信息 */
|
|
|
+- (BOOL)saveFileInfoWithDict:(NSDictionary *)dict with:(NSString*)url {
|
|
|
+
|
|
|
+ if(!dict || !url){
|
|
|
+ return NO;
|
|
|
+ }
|
|
|
+
|
|
|
+ BOOL flag = NO;
|
|
|
+ @synchronized (self) {
|
|
|
+ NSString *key = url;
|
|
|
+ NSMutableDictionary *dictM = [self getDownloadDownList];
|
|
|
+ [dictM setObject:dict forKey:key];
|
|
|
+ flag = [dictM writeToFile:[self getDownloadDonePlistPath] atomically:YES];
|
|
|
+ }
|
|
|
+
|
|
|
+ return flag;
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
+/** 删除配置信息 */
|
|
|
+- (BOOL)deleteFileInfoWithUrl:(NSString *)url {
|
|
|
+ if(!url){
|
|
|
+ return NO;
|
|
|
+ }
|
|
|
+
|
|
|
+ BOOL flag = NO;
|
|
|
+ @synchronized (self) {
|
|
|
+ NSMutableDictionary *dictM = [self getDownloadDownList];
|
|
|
+ [dictM removeObjectForKey:url];
|
|
|
+ flag = [dictM writeToFile:[self getDownloadDonePlistPath] atomically:YES];
|
|
|
+ }
|
|
|
+ return flag;
|
|
|
+}
|
|
|
+
|
|
|
+#pragma mark-保存完成后 删除此次信息 download done plist
|
|
|
+- (void)deleteDownloadDonePlistInfoBy:(NSString*)fullPath
|
|
|
+{
|
|
|
+ HLog(@"deleteDownloadDonePlistInfoBy:%@",fullPath)
|
|
|
+ NSMutableDictionary *dictM = [self getDownloadDownList];
|
|
|
+ for (NSString*key in dictM) {
|
|
|
+ NSDictionary*dict = dictM[key];
|
|
|
+
|
|
|
+ if ([[dict allKeys] containsObject:@"fullPath"]) {
|
|
|
+ NSString * infofullPath = dict[@"fullPath"];
|
|
|
+
|
|
|
+ if([fullPath isEqualToString:infofullPath]){
|
|
|
+ [self deleteFileInfoWithUrl:key];
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+#pragma mark-查询还有没有没处理的任务
|
|
|
+- (void)checkDownloadDonePlistInfoFun
|
|
|
+{
|
|
|
+ NSMutableDictionary *dictM = [[self getDownloadDownList] mutableCopy];
|
|
|
+ if(dictM.count > 0){
|
|
|
+ for (NSString*key in dictM) {
|
|
|
+ NSDictionary*dict = dictM[key];
|
|
|
+ customDownloadOperation *model = [customDownloadOperation mj_objectWithKeyValues:dict];
|
|
|
+
|
|
|
+ //判断文件是否还存在
|
|
|
+ if (![[NSFileManager defaultManager] fileExistsAtPath:model.fullPath]) {
|
|
|
+ //不存在 删除信息
|
|
|
+ [self deleteFileInfoWithUrl:key];
|
|
|
+ }
|
|
|
+ else{//存在 通知保存流程
|
|
|
+ dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
|
|
|
+ [[webSocketManager shareInstance] NasDownloadTaskFinishedNoti:model];
|
|
|
+ });
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+}
|
|
|
+@end
|
|
|
+
|