|
@@ -13,12 +13,15 @@
|
|
|
NSString *const kUploadSetting = @"UploadSettingKey";
|
|
NSString *const kUploadSetting = @"UploadSettingKey";
|
|
|
NSString *const UPLOAD_FINISH_NOTIFICATION = @"upload_finish_notification";
|
|
NSString *const UPLOAD_FINISH_NOTIFICATION = @"upload_finish_notification";
|
|
|
NSString *const UPLOAD_COUNT_CHANGE_NOTIFICATION = @"upload_count_change_notification";
|
|
NSString *const UPLOAD_COUNT_CHANGE_NOTIFICATION = @"upload_count_change_notification";
|
|
|
|
|
+NSString *const UPLOAD_REFRESH_UI_NOTIFICATION = @"upload_refresh_ui_notification";
|
|
|
|
|
|
|
|
@interface RAUploadManager ()
|
|
@interface RAUploadManager ()
|
|
|
|
|
|
|
|
@property (nonatomic,strong) NSTimer *retryTimer;
|
|
@property (nonatomic,strong) NSTimer *retryTimer;
|
|
|
@property (nonatomic,strong) NSMutableArray<RAUploadOperation *> *retryArr;
|
|
@property (nonatomic,strong) NSMutableArray<RAUploadOperation *> *retryArr;
|
|
|
|
|
|
|
|
|
|
+@property (nonatomic,assign) BOOL isNotReachable;
|
|
|
|
|
+
|
|
|
@end
|
|
@end
|
|
|
|
|
|
|
|
@implementation RAUPloadManagerConfigure
|
|
@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 autoRmFinish = [[param objectForKey:@"auto_rm_finish"] boolValue];
|
|
|
BOOL autoRmErr = [[param objectForKey:@"auto_rm_error"] boolValue];
|
|
BOOL autoRmErr = [[param objectForKey:@"auto_rm_error"] boolValue];
|
|
|
BOOL onlyWiFi = [[param objectForKey:@"only_wifi"] boolValue];
|
|
BOOL onlyWiFi = [[param objectForKey:@"only_wifi"] boolValue];
|
|
|
|
|
+ BOOL monitorNetwork = [[param objectForKey:@"monitor_network"] boolValue];
|
|
|
int retryCount = [[param objectForKey:@"retry_count"] intValue];
|
|
int retryCount = [[param objectForKey:@"retry_count"] intValue];
|
|
|
NSNumber *timeInterval = [param objectForKey:@"retry_time_interval"];
|
|
NSNumber *timeInterval = [param objectForKey:@"retry_time_interval"];
|
|
|
if (timeInterval != nil) {
|
|
if (timeInterval != nil) {
|
|
@@ -44,6 +48,8 @@ NSString *const UPLOAD_COUNT_CHANGE_NOTIFICATION = @"upload_count_change_notific
|
|
|
self.autoRemoveError = autoRmErr;
|
|
self.autoRemoveError = autoRmErr;
|
|
|
self.retryCount = retryCount;
|
|
self.retryCount = retryCount;
|
|
|
self.onlyWIFI = onlyWiFi;
|
|
self.onlyWIFI = onlyWiFi;
|
|
|
|
|
+ self.monitorNetwork = monitorNetwork;
|
|
|
|
|
+
|
|
|
} else {
|
|
} else {
|
|
|
self.autoUpload = YES;
|
|
self.autoUpload = YES;
|
|
|
self.autoRemoveFinish = NO;
|
|
self.autoRemoveFinish = NO;
|
|
@@ -51,6 +57,7 @@ NSString *const UPLOAD_COUNT_CHANGE_NOTIFICATION = @"upload_count_change_notific
|
|
|
self.retryCount = 5;
|
|
self.retryCount = 5;
|
|
|
self.onlyWIFI = NO;
|
|
self.onlyWIFI = NO;
|
|
|
self.retryTimeIntetval = 300;
|
|
self.retryTimeIntetval = 300;
|
|
|
|
|
+ self.monitorNetwork = YES;
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
return self;
|
|
return self;
|
|
@@ -64,7 +71,8 @@ NSString *const UPLOAD_COUNT_CHANGE_NOTIFICATION = @"upload_count_change_notific
|
|
|
@"auto_rm_error" : @(self.autoRemoveError),
|
|
@"auto_rm_error" : @(self.autoRemoveError),
|
|
|
@"retry_count" : @(self.retryCount),
|
|
@"retry_count" : @(self.retryCount),
|
|
|
@"only_wifi" : @(self.onlyWIFI),
|
|
@"only_wifi" : @(self.onlyWIFI),
|
|
|
- @"retry_time_interval" : @(self.retryTimeIntetval)
|
|
|
|
|
|
|
+ @"retry_time_interval" : @(self.retryTimeIntetval),
|
|
|
|
|
+ @"monitor_network" : @(self.monitorNetwork)
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
[[NSUserDefaults standardUserDefaults] setObject:param forKey:kUploadSetting];
|
|
[[NSUserDefaults standardUserDefaults] setObject:param forKey:kUploadSetting];
|
|
@@ -97,11 +105,40 @@ NSString *const UPLOAD_COUNT_CHANGE_NOTIFICATION = @"upload_count_change_notific
|
|
|
|
|
|
|
|
NetworkStatus netStatus = [reachability currentReachabilityStatus];
|
|
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 {
|
|
- (instancetype)init {
|
|
@@ -131,6 +168,8 @@ NSString *const UPLOAD_COUNT_CHANGE_NOTIFICATION = @"upload_count_change_notific
|
|
|
BOOL onlyWiFi = [[param objectForKey:@"only_wifi"] boolValue];
|
|
BOOL onlyWiFi = [[param objectForKey:@"only_wifi"] boolValue];
|
|
|
int retryCount = [[param objectForKey:@"retry_count"] intValue];
|
|
int retryCount = [[param objectForKey:@"retry_count"] intValue];
|
|
|
NSNumber *timeInterval = [param objectForKey:@"retry_time_interval"];
|
|
NSNumber *timeInterval = [param objectForKey:@"retry_time_interval"];
|
|
|
|
|
+ BOOL monitorNetwork = [[param objectForKey:@"monitor_network"] boolValue];
|
|
|
|
|
+
|
|
|
if (timeInterval != nil) {
|
|
if (timeInterval != nil) {
|
|
|
self.retryTimeInterval = [timeInterval intValue];
|
|
self.retryTimeInterval = [timeInterval intValue];
|
|
|
} else {
|
|
} else {
|
|
@@ -141,6 +180,8 @@ NSString *const UPLOAD_COUNT_CHANGE_NOTIFICATION = @"upload_count_change_notific
|
|
|
// self.removeError = autoRmErr;
|
|
// self.removeError = autoRmErr;
|
|
|
self.maxRetry = retryCount;
|
|
self.maxRetry = retryCount;
|
|
|
self.onlyWiFi = onlyWiFi;
|
|
self.onlyWiFi = onlyWiFi;
|
|
|
|
|
+ self.monitorNetwork = monitorNetwork;
|
|
|
|
|
+
|
|
|
} else {
|
|
} else {
|
|
|
self.autoStart = YES;
|
|
self.autoStart = YES;
|
|
|
self.removeFinish = NO;
|
|
self.removeFinish = NO;
|
|
@@ -148,6 +189,7 @@ NSString *const UPLOAD_COUNT_CHANGE_NOTIFICATION = @"upload_count_change_notific
|
|
|
self.maxRetry = 5;
|
|
self.maxRetry = 5;
|
|
|
self.onlyWiFi = NO;
|
|
self.onlyWiFi = NO;
|
|
|
self.retryTimeInterval = 300;
|
|
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)
|
|
if([task[@"status"] intValue]==TaskStatusStart||[task[@"status"] intValue]==TaskStatusWait)
|
|
|
return; // task 已在执行队列,返回
|
|
return; // task 已在执行队列,返回
|
|
|
|
|
|
|
|
- RAUploadOperation* operation = [[RAUploadOperation alloc] initWithTaskinfo:task retry:self.maxRetry];
|
|
|
|
|
|
|
+ RAUploadOperation* operation = [[RAUploadOperation alloc] initWithTaskinfo:task retry:self.maxRetry];
|
|
|
[operation setCompletionBlock:^{
|
|
[operation setCompletionBlock:^{
|
|
|
switch ([block_task[@"status"] intValue]) {
|
|
switch ([block_task[@"status"] intValue]) {
|
|
|
case TaskStatusFinish:
|
|
case TaskStatusFinish:
|
|
@@ -531,12 +573,29 @@ NSString *const UPLOAD_COUNT_CHANGE_NOTIFICATION = @"upload_count_change_notific
|
|
|
}];
|
|
}];
|
|
|
|
|
|
|
|
task[@"msg"] = nil;
|
|
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{
|
|
//- (void) uploadTask:(NSMutableDictionary*) task url:(NSString*)url{
|
|
|
//
|
|
//
|
|
|
//// __weak typeof(self) weakself = self;
|
|
//// __weak typeof(self) weakself = self;
|