// // RAUploadManager.m // test_autolayout // // Created by Ray on 02/05/2017. // Copyright © 2017 USAI. All rights reserved. // #import #import "RAUploadManager.h" #import "NetworkUtils.h" #import "RAUtils.h" #import "UploadSettingController.h" @implementation RAUploadManager - (instancetype)init { if (self = [super init]) { self.queue_status = QueueStatusDefault; NSDictionary *param = [[NSUserDefaults standardUserDefaults] objectForKey:kUploadSetting]; if (param) { BOOL autoUpload = [[param objectForKey:@"auto_upload"] boolValue]; BOOL autoRmFinish = [[param objectForKey:@"auto_rm_finish"] boolValue]; BOOL autoRmErr = [[param objectForKey:@"auto_rm_error"] boolValue]; int retryCount = [[param objectForKey:@"retry_count"] intValue]; self.autoStart = autoUpload; self.removeFinish = autoRmFinish; self.removeError = autoRmErr; self.maxRetry = retryCount; } else { self.autoStart = YES; self.removeFinish = YES; self.removeError = NO; self.maxRetry = 2; } self.newtaskStatus = TaskStatusWait; self.maxThread = 3; // self.autoStart = true; // self.removeError=true; // self.removeFinish = true; self.operation_queue = [NSOperationQueue new]; self.operation_queue.maxConcurrentOperationCount = self.maxThread; [self.operation_queue addObserver:self forKeyPath:@"operationCount" options:(NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld) context:@"queueFinished changed"]; //load task 要在监听arr_queue之前 [self loadTasks]; [self addObserver:self forKeyPath:@"arr_queue" options:(NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld) context:@"arr_queue changed"]; // self.arr_queue_lock = [NSLock new]; // [self.arr_queue_lock lock]; // [self.arr_queue_lock lock]; // [self.arr_queue_lock unlock]; // [self.arr_queue_lock unlock]; // self.backgroundColor = [UIColor clearColor]; } return self; } -(void) dealloc { [self.operation_queue removeObserver:self forKeyPath:@"operationCount"]; [self.operation_queue removeObserver:self forKeyPath:@"arr_queue"]; } - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { if([keyPath isEqualToString:@"operationCount"]) { if([[change objectForKey:NSKeyValueChangeNewKey] intValue]==0) { for(NSMutableDictionary* task in self.arr_queue) { if([task[@"status"] intValue] == TaskStatusError) { self.queue_status = QueueStatusFinishWithError; return; } } self.queue_status = QueueStatusFinish; } } if([keyPath isEqualToString:@"arr_queue"]) { NSArray* newqueue=[change objectForKey:NSKeyValueChangeNewKey]; NSArray* oldqueue=[change objectForKey:NSKeyValueChangeOldKey]; if([newqueue isKindOfClass:[NSNull class]]) newqueue=nil; if([oldqueue isKindOfClass:[NSNull class]]) oldqueue=nil; if(newqueue.count>oldqueue.count) { self.queue_status = QueueStatusAdd; return; } } } //-(void) upload:(NSString*) url //{ // while(self.activeThread