Просмотр исходного кода

修复上传管理器状态保存和恢复失败的问题

Ray Zhang 7 лет назад
Родитель
Сommit
3e76454a97
1 измененных файлов с 27 добавлено и 3 удалено
  1. 27 3
      common/upload/RAUploadManager.m

+ 27 - 3
common/upload/RAUploadManager.m

@@ -270,6 +270,7 @@ static RAUploadManager *sharedInstance;
 - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
 {
     
+    [self saveTasks];
     if([keyPath isEqualToString:@"operationCount"])
     {
 
@@ -343,6 +344,7 @@ static RAUploadManager *sharedInstance;
 //        [[self mutableArrayValueForKey:@"arr_queue"] addObject:task];
         
         [[self mutableArrayValueForKey:@"arr_queue"] insertObject:task atIndex:0];
+        [self saveTasks];
     }
     
     if(self.newtaskStatus==TaskStatusWait)
@@ -460,6 +462,7 @@ static RAUploadManager *sharedInstance;
     
     @synchronized(self) {
         [[self mutableArrayValueForKey:@"arr_queue"] removeObject:task];
+        [self saveTasks];
     }
 
 
@@ -482,9 +485,21 @@ static RAUploadManager *sharedInstance;
 //}
 -(void) saveTasks
 {
+        @synchronized(self) {
     NSUserDefaults *defaults =[NSUserDefaults standardUserDefaults];
-    [defaults setObject:self.arr_queue forKey:@"upload_queue"];
+    
+    NSMutableArray* save_arr = [NSMutableArray new];
+    for(NSMutableDictionary* task in self.arr_queue)
+    {
+        NSMutableDictionary* savetask = [task mutableCopy];
+        savetask[@"operation"] = nil;
+        if([savetask[@"status"] intValue]==TaskStatusWait)
+            savetask[@"status"]=[NSNumber numberWithInteger:TaskStatusStop];
+        [save_arr addObject:savetask];
+    }
+    [defaults setObject:save_arr forKey:@"upload_queue"];
     [defaults synchronize];
+        }
 }
 -(void) loadTasks
 {
@@ -498,10 +513,12 @@ static RAUploadManager *sharedInstance;
     {
         NSMutableDictionary* newtask =[task mutableCopy];
         [self.arr_queue addObject:newtask];
+        if([newtask[@"status"] intValue]==TaskStatusWait)
+            newtask[@"status"] =[NSNumber numberWithInteger:TaskStatusStop];
         if(self.autoStart&&[task[@"status"] intValue]!=TaskStatusError&&[task[@"status"] intValue]!=TaskStatusFinish)
             [self startTask:newtask];
     }
-    
+//    [self.operation_queue start];
 //    NSDictionary* ddd = arr[0] ;
 //    NSMutableDictionary* eee = [ddd mutableCopy];
 //    
@@ -549,6 +566,7 @@ static RAUploadManager *sharedInstance;
     task[@"status"] = [NSNumber numberWithInt:TaskStatusStop] ;
     task[@"progress"] = [NSNumber numberWithDouble:0.0];
     task[@"msg"]= @"";
+    [self saveTasks];
     if (operation.updateUI) { // 网络状态改变时,首先是正在进行的网络活动中断,然后才通知网络改变
         operation.updateUI();
     }
@@ -575,9 +593,13 @@ static RAUploadManager *sharedInstance;
     
     RAUploadOperation* operation = [[RAUploadOperation alloc] initWithTaskinfo:task retry:self.maxRetry];
     [operation setCompletionBlock:^{
+        [self saveTasks];
+        NSLog(@"%@  %@",block_task[@"name"],block_task[@"status"]);
         switch ([block_task[@"status"] intValue]) {
+                
             case TaskStatusFinish:
             {
+                
                 if(weakSelf.removeFinish)
                    [self removeTask:block_task];
                 [[NSNotificationCenter defaultCenter] postNotificationName:UPLOAD_FINISH_NOTIFICATION object:nil userInfo:block_task];
@@ -596,8 +618,10 @@ static RAUploadManager *sharedInstance;
     }];
 
     task[@"msg"] = nil;
-    task[@"operation"] = operation;
+    
     task[@"status"] = [NSNumber numberWithInt:self.newtaskStatus] ;
+    [self saveTasks];
+    task[@"operation"] = operation;
     [self.operation_queue addOperation:operation];
     
     dispatch_async(dispatch_get_main_queue(), ^{