Răsfoiți Sursa

1.修改iOS Apex Drivers上传网络连接恢复时开始重传。
2.修改iOS Apex Drivers在上传界面停止任务后然后重启任务界面不更新。

Pen Li 7 ani în urmă
părinte
comite
a8d99354bf

+ 7 - 0
common/upload/RAUploadListViewController.m

@@ -36,6 +36,8 @@
     
     
     self.uploadTableView.tableFooterView = [UIView new];
+    
+    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(uploadRefreshNotification:) name:UPLOAD_REFRESH_UI_NOTIFICATION object:nil];
 }
 - (void)clearList {
     
@@ -75,6 +77,8 @@
     [ [ UIApplication sharedApplication] setIdleTimerDisabled:NO ] ;
     AppDelegate* appdelegate=(AppDelegate*)[UIApplication sharedApplication].delegate;
     [appdelegate.uploadManager removeObserver:self forKeyPath:@"arr_queue"];
+    
+    [[NSNotificationCenter defaultCenter] removeObserver:self];
 }
 
 - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
@@ -91,6 +95,9 @@
     }
 }
 
+- (void)uploadRefreshNotification:(NSNotification *)notification {
+    [self.uploadTableView reloadData];
+}
 
 #pragma mark - TableView DataSource
 

+ 4 - 0
common/upload/RAUploadManager.h

@@ -20,6 +20,7 @@
 
 FOUNDATION_EXTERN NSString *const UPLOAD_FINISH_NOTIFICATION;
 FOUNDATION_EXTERN NSString *const UPLOAD_COUNT_CHANGE_NOTIFICATION;
+FOUNDATION_EXTERN NSString *const UPLOAD_REFRESH_UI_NOTIFICATION;
 
 typedef NS_ENUM(NSInteger, QueueStatus) {
     QueueStatusDefault = 0,
@@ -39,6 +40,7 @@ extern NSString *const kUploadSetting;
 @property (nonatomic,assign) BOOL autoRemoveError;
 @property (nonatomic,assign) BOOL autoUpload;
 @property (nonatomic,assign) BOOL onlyWIFI;
+@property (nonatomic,assign) BOOL monitorNetwork;///<网络断开,停止所有任务。网络恢复重启任务,除了Error状态下的任务
 @property (nonatomic,assign) NSUInteger retryCount;
 @property (nonatomic,assign) NSTimeInterval retryTimeIntetval;
 
@@ -53,6 +55,8 @@ extern NSString *const kUploadSetting;
 @property (assign) int maxRetry;
 @property (nonatomic,assign) int retryTimeInterval;
 
+@property (nonatomic,assign) BOOL monitorNetwork;///<网络断开,停止所有任务。网络恢复重启任务,除了Error状态下的任务
+
 @property (assign) TaskStatus newtaskStatus;
 @property (strong,nonatomic) NSMutableArray* arr_queue;
 //-(void) upload:(NSString*) url;

+ 68 - 9
common/upload/RAUploadManager.m

@@ -13,12 +13,15 @@
 NSString *const kUploadSetting = @"UploadSettingKey";
 NSString *const UPLOAD_FINISH_NOTIFICATION = @"upload_finish_notification";
 NSString *const UPLOAD_COUNT_CHANGE_NOTIFICATION = @"upload_count_change_notification";
+NSString *const UPLOAD_REFRESH_UI_NOTIFICATION = @"upload_refresh_ui_notification";
 
 @interface RAUploadManager ()
 
 @property (nonatomic,strong) NSTimer *retryTimer;
 @property (nonatomic,strong) NSMutableArray<RAUploadOperation *> *retryArr;
 
+@property (nonatomic,assign) BOOL isNotReachable;
+
 @end
 
 @implementation RAUPloadManagerConfigure
@@ -32,6 +35,7 @@ NSString *const UPLOAD_COUNT_CHANGE_NOTIFICATION = @"upload_count_change_notific
             BOOL autoRmFinish = [[param objectForKey:@"auto_rm_finish"] boolValue];
             BOOL autoRmErr = [[param objectForKey:@"auto_rm_error"] boolValue];
             BOOL onlyWiFi = [[param objectForKey:@"only_wifi"] boolValue];
+            BOOL monitorNetwork = [[param objectForKey:@"monitor_network"] boolValue];
             int retryCount = [[param objectForKey:@"retry_count"] intValue];
             NSNumber *timeInterval = [param objectForKey:@"retry_time_interval"];
             if (timeInterval != nil) {
@@ -44,6 +48,8 @@ NSString *const UPLOAD_COUNT_CHANGE_NOTIFICATION = @"upload_count_change_notific
             self.autoRemoveError = autoRmErr;
             self.retryCount = retryCount;
             self.onlyWIFI = onlyWiFi;
+            self.monitorNetwork = monitorNetwork;
+            
         } else {
             self.autoUpload = YES;
             self.autoRemoveFinish = NO;
@@ -51,6 +57,7 @@ NSString *const UPLOAD_COUNT_CHANGE_NOTIFICATION = @"upload_count_change_notific
             self.retryCount = 5;
             self.onlyWIFI = NO;
             self.retryTimeIntetval = 300;
+            self.monitorNetwork = YES;
         }
     }
     return self;
@@ -64,7 +71,8 @@ NSString *const UPLOAD_COUNT_CHANGE_NOTIFICATION = @"upload_count_change_notific
                             @"auto_rm_error"    : @(self.autoRemoveError),
                             @"retry_count" : @(self.retryCount),
                             @"only_wifi" : @(self.onlyWIFI),
-                            @"retry_time_interval" : @(self.retryTimeIntetval)
+                            @"retry_time_interval" : @(self.retryTimeIntetval),
+                            @"monitor_network" : @(self.monitorNetwork)
                             };
     
     [[NSUserDefaults standardUserDefaults] setObject:param forKey:kUploadSetting];
@@ -97,11 +105,40 @@ NSString *const UPLOAD_COUNT_CHANGE_NOTIFICATION = @"upload_count_change_notific
     
     NetworkStatus netStatus = [reachability currentReachabilityStatus];
     
-    if (self.onlyWiFi && netStatus != ReachableViaWiFi) {
-        DebugLog(@"not wifi & stop task");
-        [self.retryArr removeAllObjects];
-        [self stopAllTasks];
+    if (self.monitorNetwork) {
+        
+        if (netStatus == NotReachable) { // 网络断开
+            
+            self.isNotReachable = YES;
+            
+            [self.retryArr removeAllObjects];
+            [self stopAllTasks];
+            
+        } else if ((self.onlyWiFi && netStatus != ReachableViaWiFi)) { // 网络连接正常,但是onlyWifi
+
+            self.isNotReachable = NO;
+            
+            [self.retryArr removeAllObjects];
+            [self stopAllTasks];
+
+        } else { // 网络正常连接
+            
+            if (self.isNotReachable) { // 重启任务
+                
+                [self restartAllTask];
+            }
+            self.isNotReachable = NO;
+        }
+    } else {
+        
+        if ((self.onlyWiFi && netStatus != ReachableViaWiFi)) {
+            DebugLog(@"not wifi & stop task");
+            [self.retryArr removeAllObjects];
+            [self stopAllTasks];
+        }
     }
+    
+    
 }
 
 - (instancetype)init {
@@ -131,6 +168,8 @@ NSString *const UPLOAD_COUNT_CHANGE_NOTIFICATION = @"upload_count_change_notific
             BOOL onlyWiFi = [[param objectForKey:@"only_wifi"] boolValue];
             int retryCount = [[param objectForKey:@"retry_count"] intValue];
             NSNumber *timeInterval = [param objectForKey:@"retry_time_interval"];
+            BOOL monitorNetwork = [[param objectForKey:@"monitor_network"] boolValue];
+            
             if (timeInterval != nil) {
                 self.retryTimeInterval = [timeInterval intValue];
             } else {
@@ -141,6 +180,8 @@ NSString *const UPLOAD_COUNT_CHANGE_NOTIFICATION = @"upload_count_change_notific
 //            self.removeError = autoRmErr;
             self.maxRetry = retryCount;
             self.onlyWiFi = onlyWiFi;
+            self.monitorNetwork = monitorNetwork;
+            
         } else {
             self.autoStart = YES;
             self.removeFinish = NO;
@@ -148,6 +189,7 @@ NSString *const UPLOAD_COUNT_CHANGE_NOTIFICATION = @"upload_count_change_notific
             self.maxRetry = 5;
             self.onlyWiFi = NO;
             self.retryTimeInterval = 300;
+            self.monitorNetwork = YES;
         }
 
         
@@ -508,7 +550,7 @@ NSString *const UPLOAD_COUNT_CHANGE_NOTIFICATION = @"upload_count_change_notific
     if([task[@"status"] intValue]==TaskStatusStart||[task[@"status"] intValue]==TaskStatusWait)
         return; // task 已在执行队列,返回
     
-        RAUploadOperation* operation = [[RAUploadOperation alloc] initWithTaskinfo:task retry:self.maxRetry];
+    RAUploadOperation* operation = [[RAUploadOperation alloc] initWithTaskinfo:task retry:self.maxRetry];
     [operation setCompletionBlock:^{
         switch ([block_task[@"status"] intValue]) {
             case TaskStatusFinish:
@@ -531,12 +573,29 @@ NSString *const UPLOAD_COUNT_CHANGE_NOTIFICATION = @"upload_count_change_notific
     }];
 
     task[@"msg"] = nil;
-        task[@"operation"] = operation;
-        task[@"status"] = [NSNumber numberWithInt:self.newtaskStatus] ;
-        [self.operation_queue addOperation:operation];
+    task[@"operation"] = operation;
+    task[@"status"] = [NSNumber numberWithInt:self.newtaskStatus] ;
+    [self.operation_queue addOperation:operation];
+    
+    dispatch_async(dispatch_get_main_queue(), ^{
+        [[NSNotificationCenter defaultCenter] postNotificationName:UPLOAD_REFRESH_UI_NOTIFICATION object:nil];
+    });
+}
+
+
+- (void)restartAllTask {
     
+    for(NSMutableDictionary* task in self.arr_queue) {
+        
+        TaskStatus status = [task[@"status"] intValue];
         
+        if (status == TaskStatusWait || status == TaskStatusStop) {
+            [self startTask:task];
+        }
+    }
+    
 }
+
 //- (void) uploadTask:(NSMutableDictionary*) task url:(NSString*)url{
 //    
 ////    __weak typeof(self) weakself = self;