Browse Source

1.下载过程中网络切换 用户无感继续下载

huangxiaodong 1 year ago
parent
commit
e34a6cd40b

+ 24 - 6
创维盒子/双子星云手机/AppDelegate/AppDelegate.m

@@ -253,7 +253,7 @@
             [pingManager shareManager].isPingOk = NO;
         }
         
-        //是否备份中
+        //是否备份中 处理切换网络环境 用户无感备份切换
         if([nasBackupsManager shareInstance].curPhotosBackupsTaskMod
            && [nasBackupsManager shareInstance].curPhotosBackupsTaskMod.curBackupsState == backupsStateUploading){
             
@@ -266,20 +266,16 @@
             });
         }
         
-        HLog(@"hxd 1111")
-        //是否上传中
+        //是否上传中 处理切换网络环境 用户无感上传切换
         BOOL needToReUploadTaskType = [nasUploadFileManager shareInstance].needToReUploadTaskType;
         if(needToReUploadTaskType){//如果网络层先保存 这里为YES
-            HLog(@"hxd 2222")
             dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
                 [[nasUploadFileManager shareInstance] reUploadFileFunByNetWork];
             });
         }
         else{
-            HLog(@"hxd 3333")
             //有可能是网络变化先收到通知
             if([nasUploadFileManager shareInstance].uploadingArr.count > 0){
-                HLog(@"hxd 4444")
                 [[nasUploadFileManager shareInstance] saveUploadingTaskByNetWorkErrorFun];
                 //因为不知道是网络变化通知快 还是传输快 这里5秒后重新传
                 dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
@@ -288,6 +284,28 @@
             }
         }
         
+        HLog(@"hxd 1111")
+        //是否下载中 处理切换网络环境 用户无感下载切换
+        BOOL needToReDownloadTaskType = [nasDownloadFileManager shareInstance].needToReDownloadTaskType;
+        if(needToReDownloadTaskType){//如果网络层先保存 这里为YES
+            HLog(@"hxd 2222")
+            dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
+                [[nasDownloadFileManager shareInstance] reDownloadloadFileFunByNetWork];
+            });
+        }
+        else{
+            HLog(@"hxd 3333")
+            //有可能是网络变化先收到通知
+            if([nasDownloadFileManager shareInstance].downLoadFileModelDataArr.count > 0){
+                HLog(@"hxd 4444")
+                [[nasDownloadFileManager shareInstance] saveDownloadloadingTaskByNetWorkErrorFun];
+                //因为不知道是网络变化通知快 还是传输快 这里5秒后重新传
+                dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
+                    [[nasDownloadFileManager shareInstance] reDownloadloadFileFunByNetWork];
+                });
+            }
+        }
+        
     }];
 
     [[AFNetworkReachabilityManager sharedManager] startMonitoring];

+ 8 - 0
创维盒子/双子星云手机/NAS/nasDownloadManager/nasDownloadFileManager.h

@@ -33,6 +33,9 @@ NS_ASSUME_NONNULL_BEGIN
 
 @property (nonatomic, strong) NSMutableDictionary * _Nullable downloadDoneList;
 
+@property (nonatomic, strong) NSMutableArray * _Nullable netWorkFailSaveArr;
+@property (nonatomic, assign) BOOL  needToReDownloadTaskType;//
+
 //添加保存记录 NSArray<couldPhoneFileModel>* fileListVOS;
 - (void)addNasDownloadRecordFunBy:(NSArray*)arr complete:(custom_complete_Arr)complete;
 #pragma mark 读取数据库数据
@@ -67,6 +70,11 @@ NS_ASSUME_NONNULL_BEGIN
 
 #pragma mark-查询还有没有没处理的任务
 - (void)checkDownloadDonePlistInfoFun;
+
+//网络失败后任务暂时保存
+- (void)saveDownloadloadingTaskByNetWorkErrorFun;
+//重新上传网络失败的任务
+- (void)reDownloadloadFileFunByNetWork;
 @end
 
 NS_ASSUME_NONNULL_END

+ 31 - 0
创维盒子/双子星云手机/NAS/nasDownloadManager/nasDownloadFileManager.m

@@ -761,5 +761,36 @@ static nasDownloadFileManager * cur_nasDownloadFileManager = nil;
             
     });
 }
+
+//网络失败后任务暂时保存
+- (void)saveDownloadloadingTaskByNetWorkErrorFun
+{
+    HLog(@"hxd saveDownloadloadingTaskByNetWorkErrorFun")
+    _netWorkFailSaveArr = [NSMutableArray arrayWithArray:self.downLoadFileModelDataArr];
+    
+    [[nasDownloadManager shareManager] suspendAllDownloadTask];
+    
+    if(_netWorkFailSaveArr.count > 0){
+        _needToReDownloadTaskType = YES;
+    }
+    
+}
+
+//重新上传网络失败的任务
+- (void)reDownloadloadFileFunByNetWork
+{
+    _needToReDownloadTaskType = NO;
+    
+    if(_netWorkFailSaveArr && _netWorkFailSaveArr.count >0){
+        
+        //重新获取url
+        for (couldPhoneFileModel *fileModel in _netWorkFailSaveArr) {
+            fileModel.fileUrl = @"";
+        }
+        
+        [self beginDownloadFilesByUrls:_netWorkFailSaveArr];
+    }
+}
+
 @end
 

+ 8 - 4
创维盒子/双子星云手机/NAS/nasDownloadManager/nasDownloadManager.m

@@ -520,12 +520,16 @@ totalBytesExpectedToSend:(int64_t)totalBytesExpectedToSend {
         }
     }
     
-    if(error && error.code == -1005 && !operation.isFile404Cancel){//网络中断
+    // -1005 网络中断 1009 网络似乎中断
+    if(error && (error.code == -1005 || error.code == -1009) && !operation.isFile404Cancel){//网络中断
         HLog(@"reDownloadNetworkTaskBy");
         //延时几秒再次启动这个任务
-        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
-            [self reDownloadNetworkTaskBy:operation.url];
-        });
+//        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
+//            [self reDownloadNetworkTaskBy:operation.url];
+//        });
+        
+        [[nasDownloadFileManager shareInstance] saveDownloadloadingTaskByNetWorkErrorFun];
+        
         return;
     }