|
|
@@ -13,10 +13,39 @@
|
|
|
|
|
|
@implementation RAUploadManager
|
|
|
|
|
|
+
|
|
|
+/*!
|
|
|
+ * Called by Reachability whenever status changes.
|
|
|
+ */
|
|
|
+- (void) reachabilityChanged:(NSNotification *)note
|
|
|
+{
|
|
|
+ [self handleReachability:self.reach];
|
|
|
+}
|
|
|
+
|
|
|
+- (void)handleReachability:(Reachability *)reachability {
|
|
|
+
|
|
|
+ NetworkStatus netStatus = [reachability currentReachabilityStatus];
|
|
|
+
|
|
|
+ if (self.onlyWiFi && netStatus != ReachableViaWiFi) {
|
|
|
+ DebugLog(@"not wifi & stop task");
|
|
|
+ [self stopAllTasks];
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
- (instancetype)init {
|
|
|
if (self = [super init]) {
|
|
|
|
|
|
|
|
|
+ /*
|
|
|
+ Observe the kNetworkReachabilityChangedNotification. When that notification is posted, the method reachabilityChanged will be called.
|
|
|
+ */
|
|
|
+ [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reachabilityChanged:) name:kReachabilityChangedNotification object:nil];
|
|
|
+
|
|
|
+ NSString *remoteHostName = @"www.apple.com";
|
|
|
+ self.reach = [Reachability reachabilityWithHostName:remoteHostName];
|
|
|
+ [self.reach startNotifier];
|
|
|
+ [self handleReachability:self.reach];
|
|
|
+
|
|
|
self.queue_status = QueueStatusDefault;
|
|
|
|
|
|
|
|
|
@@ -27,16 +56,19 @@
|
|
|
BOOL autoUpload = [[param objectForKey:@"auto_upload"] boolValue];
|
|
|
BOOL autoRmFinish = [[param objectForKey:@"auto_rm_finish"] boolValue];
|
|
|
BOOL autoRmErr = [[param objectForKey:@"auto_rm_error"] boolValue];
|
|
|
+ BOOL onlyWiFi = [[param objectForKey:@"only_wifi"] boolValue];
|
|
|
int retryCount = [[param objectForKey:@"retry_count"] intValue];
|
|
|
self.autoStart = autoUpload;
|
|
|
self.removeFinish = autoRmFinish;
|
|
|
self.removeError = autoRmErr;
|
|
|
self.maxRetry = retryCount;
|
|
|
+ self.onlyWiFi = onlyWiFi;
|
|
|
} else {
|
|
|
self.autoStart = YES;
|
|
|
self.removeFinish = YES;
|
|
|
self.removeError = NO;
|
|
|
self.maxRetry = 2;
|
|
|
+ self.onlyWiFi = YES;
|
|
|
}
|
|
|
|
|
|
|
|
|
@@ -86,6 +118,7 @@
|
|
|
-(void) dealloc
|
|
|
{
|
|
|
|
|
|
+ [[NSNotificationCenter defaultCenter] removeObserver:self name:kReachabilityChangedNotification object:nil];
|
|
|
[self.operation_queue removeObserver:self forKeyPath:@"operationCount"];
|
|
|
[self.operation_queue removeObserver:self forKeyPath:@"arr_queue"];
|
|
|
}
|
|
|
@@ -352,7 +385,7 @@
|
|
|
return; // task 已停止,返回
|
|
|
}
|
|
|
|
|
|
-
|
|
|
+ DebugLog(@"stop task");
|
|
|
RAUploadOperation* operation = task[@"operation"];
|
|
|
[operation cancel];
|
|
|
task[@"operation"]=nil;
|
|
|
@@ -371,6 +404,9 @@
|
|
|
}
|
|
|
-(void) startTask:(NSMutableDictionary*) task
|
|
|
{
|
|
|
+ if (self.onlyWiFi && self.reach.currentReachabilityStatus != ReachableViaWiFi) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
/*__block*/ NSMutableDictionary* block_task = task;
|
|
|
__weak typeof(self) weakSelf = self;
|
|
|
|
|
|
@@ -413,4 +449,12 @@
|
|
|
//
|
|
|
//
|
|
|
//}
|
|
|
+
|
|
|
+- (BOOL)canUpload {
|
|
|
+ if (self.onlyWiFi && self.reach.currentReachabilityStatus != ReachableViaWiFi) {
|
|
|
+ return NO;
|
|
|
+ }
|
|
|
+ return YES;
|
|
|
+}
|
|
|
+
|
|
|
@end
|