Ver código fonte

更新部分模块 来自DB2嵌入版本

hxb 8 anos atrás
pai
commit
31015d7119

BIN
WSCloudStorage.xcworkspace/xcuserdata/jonathanh.xcuserdatad/UserInterfaceState.xcuserstate


+ 38 - 54
WSCloudStorage.xcworkspace/xcuserdata/jonathanh.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist

@@ -13,10 +13,10 @@
             timestampString = "523416439.288966"
             startingColumnNumber = "9223372036854775807"
             endingColumnNumber = "9223372036854775807"
-            startingLineNumber = "54"
-            endingLineNumber = "54"
-            landmarkName = "-viewDidLoad"
-            landmarkType = "5">
+            startingLineNumber = "100"
+            endingLineNumber = "100"
+            landmarkName = "-resumeDownUpTask"
+            landmarkType = "7">
          </BreakpointContent>
       </BreakpointProxy>
       <BreakpointProxy
@@ -25,14 +25,14 @@
             shouldBeEnabled = "Yes"
             ignoreCount = "0"
             continueAfterRunningActions = "No"
-            filePath = "WSCloudStorage/CloudStorage/CSTabBarController.m"
-            timestampString = "523416439.288966"
+            filePath = "Pods/FMDB/src/fmdb/FMDatabaseQueue.m"
+            timestampString = "523432780.894037"
             startingColumnNumber = "9223372036854775807"
             endingColumnNumber = "9223372036854775807"
-            startingLineNumber = "56"
-            endingLineNumber = "56"
-            landmarkName = "-viewDidLoad"
-            landmarkType = "5">
+            startingLineNumber = "66"
+            endingLineNumber = "66"
+            landmarkName = "-initWithPath:flags:vfs:"
+            landmarkType = "7">
          </BreakpointContent>
       </BreakpointProxy>
       <BreakpointProxy
@@ -41,14 +41,14 @@
             shouldBeEnabled = "Yes"
             ignoreCount = "0"
             continueAfterRunningActions = "No"
-            filePath = "WSCloudStorage/CloudStorage/CSTabBarController.m"
-            timestampString = "523416439.288966"
+            filePath = "WSCloudStorage/CloudStorage/DB/CloudStorageDB.m"
+            timestampString = "523437510.412889"
             startingColumnNumber = "9223372036854775807"
             endingColumnNumber = "9223372036854775807"
-            startingLineNumber = "100"
-            endingLineNumber = "100"
-            landmarkName = "-resumeDownUpTask"
-            landmarkType = "5">
+            startingLineNumber = "48"
+            endingLineNumber = "48"
+            landmarkName = "-init"
+            landmarkType = "7">
          </BreakpointContent>
       </BreakpointProxy>
       <BreakpointProxy
@@ -57,46 +57,30 @@
             shouldBeEnabled = "Yes"
             ignoreCount = "0"
             continueAfterRunningActions = "No"
-            filePath = "WSCloudStorage/CloudStorage/CSTabBarController.m"
-            timestampString = "523416439.288966"
+            filePath = "Pods/FMDB/src/fmdb/FMDatabaseQueue.m"
+            timestampString = "523433228.074759"
+            startingColumnNumber = "9223372036854775807"
+            endingColumnNumber = "9223372036854775807"
+            startingLineNumber = "40"
+            endingLineNumber = "40"
+            landmarkName = "+databaseQueueWithPath:"
+            landmarkType = "7">
+         </BreakpointContent>
+      </BreakpointProxy>
+      <BreakpointProxy
+         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
+         <BreakpointContent
+            shouldBeEnabled = "Yes"
+            ignoreCount = "0"
+            continueAfterRunningActions = "No"
+            filePath = "Pods/FMDB/src/fmdb/FMDatabaseQueue.m"
+            timestampString = "523433229.562084"
             startingColumnNumber = "9223372036854775807"
             endingColumnNumber = "9223372036854775807"
-            startingLineNumber = "73"
-            endingLineNumber = "73"
-            landmarkName = "-viewDidLoad"
-            landmarkType = "5">
-            <Locations>
-               <Location
-                  shouldBeEnabled = "Yes"
-                  ignoreCount = "0"
-                  continueAfterRunningActions = "No"
-                  symbolName = "-[CSTabBarController resumeDownUpTask]"
-                  moduleName = "WSCloudStorage"
-                  usesParentBreakpointCondition = "Yes"
-                  urlString = "file:///Users/justine/WSWINSOFT/IOS%E4%B8%87%E8%B5%9B%E4%BA%91%E7%9B%98APP/WSCloudStorage/WSCloudStorage/CloudStorage/CSTabBarController.m"
-                  timestampString = "523360611.423801"
-                  startingColumnNumber = "9223372036854775807"
-                  endingColumnNumber = "9223372036854775807"
-                  startingLineNumber = "72"
-                  endingLineNumber = "72"
-                  offsetFromSymbolStart = "16">
-               </Location>
-               <Location
-                  shouldBeEnabled = "Yes"
-                  ignoreCount = "0"
-                  continueAfterRunningActions = "No"
-                  symbolName = "__38-[CSTabBarController resumeDownUpTask]_block_invoke"
-                  moduleName = "WSCloudStorage"
-                  usesParentBreakpointCondition = "Yes"
-                  urlString = "file:///Users/justine/WSWINSOFT/IOS%E4%B8%87%E8%B5%9B%E4%BA%91%E7%9B%98APP/WSCloudStorage/WSCloudStorage/CloudStorage/CSTabBarController.m"
-                  timestampString = "523360611.42399"
-                  startingColumnNumber = "9223372036854775807"
-                  endingColumnNumber = "9223372036854775807"
-                  startingLineNumber = "74"
-                  endingLineNumber = "74"
-                  offsetFromSymbolStart = "140">
-               </Location>
-            </Locations>
+            startingLineNumber = "49"
+            endingLineNumber = "49"
+            landmarkName = "+databaseQueueWithPath:flags:"
+            landmarkType = "7">
          </BreakpointContent>
       </BreakpointProxy>
    </Breakpoints>

+ 4 - 7
WSCloudStorage/AppDelegate.m

@@ -7,11 +7,7 @@
 //
 
 #import "AppDelegate.h"
-#import "CloudStorage/CSFirstPageController.h"
-
-
-//#import "LoginViewController.h"
-#import "CloudStorage/CSTabBarController.h"
+#import "CSTabBarController.h"
 @interface AppDelegate ()
 
 @end
@@ -21,12 +17,13 @@
 
 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
     // Override point for customization after application launch.
+    NSLog(@"%@",NSHomeDirectory());
     _window = [[UIWindow alloc]init];
     _window.frame = [UIScreen mainScreen].bounds;
     //CSFirstPageController *firstvc = [CSFirstPageController csFirstPageControllerWithCSFileSourceType:CSFileSourceTypeSelf pid:@"0" shareId:nil];
-    CSTabBarController *loginvc = [CSTabBarController new];
+    CSTabBarController *tabbar = [CSTabBarController new];
     //UINavigationController *nav = [[UINavigationController alloc]initWithRootViewController:loginvc];
-    _window.rootViewController = loginvc;
+    _window.rootViewController = tabbar;
     [_window makeKeyAndVisible];
     return YES;
 }

+ 12 - 12
WSCloudStorage/CloudStorage/CSFileTransListController.m

@@ -899,18 +899,18 @@ typedef void (^ParentFileResponseSubFilesBlock)(NSArray <CSFileDownUpModel *> *s
 
 - (void)shareFiles:(NSArray<CSFileDownUpFrameModel*> *)files
 {
-    __block NSMutableArray *tempArray = [NSMutableArray array];
-    
-    [files enumerateObjectsUsingBlock:^(CSFileDownUpFrameModel * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
-        [tempArray addObject:obj.csFileDownUpModel];
-    }];
-    
-    NewMessageTransController *tanrsController = [NewMessageTransController new];
-    tanrsController.csfilesArray = tempArray;
-    tanrsController.isDisableMulitselect = YES;
-    IWNavigationController *navCor = [[IWNavigationController alloc]initWithRootViewController:tanrsController];
-    
-    [self.navigationController presentViewController:navCor animated:YES completion:nil];
+//    __block NSMutableArray *tempArray = [NSMutableArray array];
+//    
+//    [files enumerateObjectsUsingBlock:^(CSFileDownUpFrameModel * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
+//        [tempArray addObject:obj.csFileDownUpModel];
+//    }];
+//    
+//    NewMessageTransController *tanrsController = [NewMessageTransController new];
+//    tanrsController.csfilesArray = tempArray;
+//    tanrsController.isDisableMulitselect = YES;
+//    IWNavigationController *navCor = [[IWNavigationController alloc]initWithRootViewController:tanrsController];
+//    
+//    [self.navigationController presentViewController:navCor animated:YES completion:nil];
 }
 
 - (void)shareFile:(CSFileDownUpFrameModel *)file

+ 309 - 277
WSCloudStorage/CloudStorage/CSFirstPageController.m

@@ -13,6 +13,8 @@
 
 #import "IWNavigationController.h"
 
+#import "CSTabBarController.h"
+
 #import "CSRouterSelectController.h"
 
 #import "HttpRequest.h"
@@ -81,7 +83,7 @@
     if (self.searchModel) {
         return self.searchResultArray;
     }else return self.normalFilesArray;
-
+    
 }
 
 - (NSMutableArray *)normalFilesArray
@@ -96,7 +98,7 @@
 - (NSMutableArray *)searchResultArray
 {
     if (!_searchResultArray) {
-    
+        
         _searchResultArray = [NSMutableArray array];
     }
     
@@ -115,7 +117,7 @@
 //首次启动使用.
 + (CSFirstPageController *)csFirstPageControllerWithCSFileSourceType:(CSFileSourceType)csFileSourceType pid:(NSString *)pid shareId:(NSString *)shareId
 {
-
+    
     CSFirstPageController *csFirstPageController = [[CSFirstPageController alloc]initCSFirstPageControllerWithCSFileSourceType:csFileSourceType pid:pid shareId:shareId];
     
     
@@ -148,7 +150,7 @@
         
         CGPoint point = CGPointMake(0, STATUSBAR_HEIGHT);
         
-//        self.tabBarController.tabBar.isHidden
+        //        self.tabBarController.tabBar.isHidden
         __block CGRect adjusetedFrame = CGRectMake(point.x, point.y, SCREEN_WIDTH, SCREEN_HEIGHT - NavBarHeight + STATUSBAR_HEIGHT - TabBarHeight);
         
         [self.navigationController setNavigationBarHidden:YES animated:YES];
@@ -158,7 +160,7 @@
         self.mainTableView.frame = adjusetedFrame;
         
     }else{
-    
+        
         __block CGRect origionFrame = CGRectMake(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT - STATUSBAR_HEIGHT - NavBarHeight - TabBarHeight);
         
         [self.navigationController setNavigationBarHidden:NO animated:YES];
@@ -175,7 +177,7 @@
         self.edgesForExtendedLayout = UIRectEdgeNone;
     }
     
-
+    
     UIBarButtonItem *muiltSelectItem = [UIBarButtonItem itemWithTarget:self action:@selector(moreOperate) icon:@"navbar_muiltSel" highlightedIcon:nil title:nil iconSize:CGSizeMake(20, 20) fontSize:14 titleColor:[UIColor whiteColor]];
     
     UIBarButtonItem *fileClassItem = [UIBarButtonItem itemWithTarget:self action:@selector(classFile) icon:nil highlightedIcon:nil title:@"分类" iconSize:CGSizeZero fontSize:14 titleColor:[UIColor whiteColor]];
@@ -195,17 +197,17 @@
     }
     
     if (self.shareID) {
-         [self getAllShareFiles];
+        [self getAllShareFiles];
     }
-   
+    
 }
 
 - (void)outCloudStorage
 {
     if (self.tabBarController) {
-         [self.tabBarController dismissViewControllerAnimated:YES completion:nil];
+        [self.tabBarController dismissViewControllerAnimated:YES completion:nil];
     }else [self.navigationController dismissViewControllerAnimated:YES completion:nil];
-   
+    
 }
 
 - (void)moreOperate
@@ -216,7 +218,7 @@
     }
     
     self.mainTableView.allowsMultipleSelection = !self.mainTableView.allowsMultipleSelection;
-
+    
     //置空.
     for (CSFileFrameModel *fileFrameModel in self.fileModelArray) {
         fileFrameModel.isFileExtensionOP = NO;
@@ -237,7 +239,7 @@
         if (self.csFileSourceType == CSFileSourceTypeSelf) {
             extensionView = [[CSFileExtensionViewForCell alloc]initWithItmes:@[@{@"icon":@"file_down_narmal",@"title":@"下载",@"opType":@(ExtensionOPDownLoad)},@{@"icon":@"file_share_normal",@"title":@"分享",@"opType":@(ExtensionOPShare)},@{@"icon":@"file_delete_normal",@"title":@"删除",@"opType":@(ExtensionOPDelete)},@{@"icon":@"file_move_normal",@"title":@"迁移",@"opType":@(ExtensionOPEdit)}]];
         }else{
-        
+            
             extensionView = [[CSFileExtensionViewForCell alloc]initWithItmes:@[@{@"icon":@"file_down_narmal",@"title":@"下载",@"opType":@(ExtensionOPDownLoad)}]];
         }
         
@@ -257,14 +259,14 @@
                     [weakSelf shareFilesToUserOrGroups:weakSelf.muilterOpFilesArray];
                     break;
                 case ExtensionOPDownLoad:
-                
+                    
                     //2017-07-17 待对多文件夹选择进行合并请求
                     [weakSelf downloadFileWithFileModels:weakSelf.muilterOpFilesArray];
                     
                     [Utils showSuccess:@"已加入下载队列" toView:weakView finish:nil];
                     
-                break;
-                
+                    break;
+                    
                     
                 default:
                     break;
@@ -288,41 +290,41 @@
     
     //调整tableview.frame
     self.mainTableView.frame = CGRectMake(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT - NavBarHeight - STATUSBAR_HEIGHT -(self.hidesBottomBarWhenPushed?0:self.tabBarController.tabBar.frame.size.height) -(self.csFilesExensionView?self.csFilesExensionView.frame.size.height:0));
-
+    
 }
 
 - (void)classFile
 {
     __weak typeof(self)weakself = self;
-
+    
     if (!self.csFileTypeClassView) {
         CSFileTypeClassView *csFileTypeClassView = [[CSFileTypeClassView alloc]init];
         csFileTypeClassView.utilityOperateBlock = ^(CSFileType csFileType){
-        
+            
             [weakself classFileWithFileType:csFileType];
             
-            //hidden 
+            //hidden
             [weakself classFile];
             
         };
         [self.view addSubview:csFileTypeClassView];
-         csFileTypeClassView.frame = CGRectMake(0, 0, self.view.frame.size.width, CSFileTypeClassViewH);
-         self.csFileTypeClassView = csFileTypeClassView;
-    
+        csFileTypeClassView.frame = CGRectMake(0, 0, self.view.frame.size.width, CSFileTypeClassViewH);
+        self.csFileTypeClassView = csFileTypeClassView;
+        
     }else{
-
+        
         [self.csFileTypeClassView removeFromSuperview];
         self.csFileTypeClassView = nil;
     }
     
-   
-   
+    
+    
 }
 
 
 - (void)initSubViews
 {
-
+    
     CloudStorageTableView *mainTableView = [[CloudStorageTableView alloc]initWithFrame:CGRectMake(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT - NavBarHeight - STATUSBAR_HEIGHT - TabBarHeight) style:UITableViewStylePlain] ;
     mainTableView.separatorStyle = UITableViewCellSeparatorStyleNone;
     mainTableView.delegate = self;
@@ -364,9 +366,9 @@
                 [weakSelf classFile];
             }
         };
-
+        
     }
-   }
+}
 
 #pragma mark --
 #pragma mark -- tableViewDatasource
@@ -391,11 +393,11 @@
         csFileCell = [CSFileCell fileCellWithTableView:tableView indexPath:indexPath identifier:CSFileCellIdentifier opItems:@[@{@"icon":@"file_down_narmal",@"title":@"下载",@"opType":@(ExtensionOPDownLoad)}]];
     }
     
-   
+    
     csFileCell.allowsMultipleSelection = tableView.allowsMultipleSelection;
-        
+    
     csFileCell.csFileFrameModel = self.fileModelArray[indexPath.row];
-   
+    
     csFileCell.indexPath = indexPath;
     __weak typeof(self.mainTableView)weakTableView = self.mainTableView;
     __weak typeof(self.view)weakView = self.view;
@@ -412,11 +414,11 @@
         [weakTableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationNone];
         
         [weakTableView scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionNone animated:YES];
-   
+        
     };
     
     csFileCell.extensionOpBlock = ^(ExtensionOP extensionOP, CSFileFrameModel *csFileFrameModel){
-    
+        
         switch (extensionOP) {
             case ExtensionOPDelete:
                 [weakself fileDeletesWithFileFrameModels:@[csFileFrameModel]];
@@ -432,7 +434,7 @@
                 break;
             case ExtensionOPDownLoad:
                 //download 文件;
-                [weakself downloadFileWithFileModel:csFileFrameModel.fileModel];
+                [weakself downloadFileWithFileModels:@[csFileFrameModel]];
                 
                 [Utils showSuccess:@"已加入下载队列" toView:weakView finish:nil];
                 break;
@@ -459,7 +461,7 @@
 #pragma mark -- tableViewDelegate
 - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
 {
-
+    
     [tableView deselectRowAtIndexPath:indexPath animated:YES];
     
     CSFileFrameModel *csFileFrameModel = self.fileModelArray[indexPath.row];
@@ -481,7 +483,7 @@
         
         [tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationNone];
     }else{
-    
+        
         //
         CSFileModel *csFileModel = csFileFrameModel.fileModel;
         
@@ -492,11 +494,11 @@
             csPage.pid = csFileModel.sid;
             csPage.csFileSourceType = self.csFileSourceType;
             csPage.father_csFileModel = csFileModel;
-//            __block CGRect origionFrame = CGRectMake(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT - STATUSBAR_HEIGHT - NavBarHeight);
-//            
-//            [self.navigationController setNavigationBarHidden:NO animated:NO];
-//            
-//            self.mainTableView.frame = origionFrame;
+            //            __block CGRect origionFrame = CGRectMake(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT - STATUSBAR_HEIGHT - NavBarHeight);
+            //
+            //            [self.navigationController setNavigationBarHidden:NO animated:NO];
+            //
+            //            self.mainTableView.frame = origionFrame;
             
             [self.navigationController pushViewController:csPage animated:YES];
             
@@ -505,7 +507,7 @@
         
     }
     
-   
+    
     
     
     
@@ -526,13 +528,13 @@
     
     CGPoint point = CGPointMake(0, STATUSBAR_HEIGHT);
     __block CGRect adjusetedFrame = CGRectMake(point.x, point.y, SCREEN_WIDTH, SCREEN_HEIGHT - NavBarHeight - TabBarHeight + STATUSBAR_HEIGHT);
-   
+    
     [self.navigationController setNavigationBarHidden:YES animated:YES];
     
     [[UIApplication sharedApplication]setStatusBarStyle:UIStatusBarStyleDefault animated:YES];
-
+    
     self.mainTableView.frame = adjusetedFrame;
-
+    
 }
 
 
@@ -542,7 +544,7 @@
     
     [self.mainTableView reloadData];
     
-     __block CGRect origionFrame = CGRectMake(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT - STATUSBAR_HEIGHT - NavBarHeight - TabBarHeight);
+    __block CGRect origionFrame = CGRectMake(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT - STATUSBAR_HEIGHT - NavBarHeight - TabBarHeight);
     
     [self.navigationController setNavigationBarHidden:NO animated:YES];
     
@@ -585,14 +587,14 @@
                 
                 [weakself.fileModelArray removeObjectsInArray:fileFrameModels];//删除数据源 内对于的对象
                 
-      
+                
                 [weakTableView deleteRowsAtIndexPaths:indexArray withRowAnimation:UITableViewRowAnimationBottom];
-              
+                
                 
                 weakExtensionView.disable = YES;
                 //[weakTableView beginUpdates];
             }else{
-            
+                
                 [Utils showError:@"删除失败" ToView:weakTableView];
             }
             
@@ -628,7 +630,7 @@
                 }else fileModel.serverFullPath = self.father_csFileModel?[NSString stringWithFormat:@"%@%@",self.father_csFileModel.serverFullPath,fileModel.name]:[NSString stringWithFormat:@"%@",fileModel.name];;
                 
                 //不存储.
-//                [CloudStorageDB addcsFiletoDB:fileModel];
+                //                [CloudStorageDB addcsFiletoDB:fileModel];
                 
                 CSFileFrameModel *csFileFrameModel = [[CSFileFrameModel alloc]initWithFileModel:fileModel];
                 [weakself.fileModelArray addObject:csFileFrameModel];
@@ -667,7 +669,7 @@
             [Utils HiddenWaitingToView:weakTableView];
             
             if (success && data) {
-
+                
                 [Utils showSuccess:@"重命名成功" toView:weakTableView finish:nil];
                 
                 //reload.
@@ -676,135 +678,135 @@
                 CSFileFrameModel *newfileFrameModel = weakSelf.fileModelArray[indexPath.row];
                 newfileFrameModel.fileModel.name = applyTextField.text;
                 [newfileFrameModel renameItemWithNewFileModel:newfileFrameModel.fileModel];
-            
+                
                 if (indexPath) {
                     [weakTableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationNone];
                 }
- 
+                
             }else{
                 
                 [Utils showError:@"重命名失败" ToView:weakTableView];
             }
             
-             }];
-            
-            
-      
+        }];
+        
+        
+        
         
     } onCancel:^(UIAlertView *alertView) {
         
     }];
- 
+    
 }
 
 - (void)createNewFileFolder{
-CSAlertView * alertview = [[CSAlertView alloc]initWithTitle:@"新建文件夹" message:@"" inputMode:YES sureBtn:@"创建" cancleBtn:@"取消"];
-__weak typeof(self)weakSelf = self;
-__weak typeof(alertview)weakalertview = alertview;
-__weak typeof(self.mainTableView)weakTableView = self.mainTableView;
-[alertview showXBAlertView];
-alertview.alertresult = ^(NSString *folderName){
-    [[HttpRequest sharedManager]cloudStorageCreateNewFileFolderWithFolderName:folderName pid:weakSelf.pid delflag:@"0" complete:^(BOOL success, id data, NSError *error) {
-        if (success && data) {
-            
-            [weakalertview stopActityAndRemoveAlertView];
-            
-            [Utils showSuccess:@"文件夹创建成功" toView:weakTableView finish:nil];
-            //reload.
-            CSFileModel *csfileModel = [CSFileModel mj_objectWithKeyValues:data[@"data"]];
-            
-            csfileModel.serverFullPath = self.father_csFileModel?[NSString stringWithFormat:@"%@%@/",self.father_csFileModel.serverFullPath,csfileModel.name]:[NSString stringWithFormat:@"%@/",csfileModel.name];
-            
-            [kCloudStorageDB addcsFiletoDB:csfileModel];
-            
-            CSFileFrameModel *csframeModel = [[CSFileFrameModel alloc]initWithFileModel:csfileModel];
-            
-            [weakSelf.fileModelArray addObject:csframeModel];
-            
-            [weakTableView reloadData];
-            //                [weakTableView insertRowsAtIndexPaths:@[[NSIndexPath indexPathForRow:[weakTableView numberOfRowsInSection:0] - 1 inSection:0]] withRowAnimation:UITableViewRowAnimationNone];
-            //
-            [weakTableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:weakSelf.fileModelArray.count - 1 inSection:0] atScrollPosition:UITableViewScrollPositionBottom animated:YES];
-        }else{
+    CSAlertView * alertview = [[CSAlertView alloc]initWithTitle:@"新建文件夹" message:@"" inputMode:YES sureBtn:@"创建" cancleBtn:@"取消"];
+    __weak typeof(self)weakSelf = self;
+    __weak typeof(alertview)weakalertview = alertview;
+    __weak typeof(self.mainTableView)weakTableView = self.mainTableView;
+    [alertview showXBAlertView];
+    alertview.alertresult = ^(NSString *folderName){
+        [[HttpRequest sharedManager]cloudStorageCreateNewFileFolderWithFolderName:folderName pid:weakSelf.pid delflag:@"0" complete:^(BOOL success, id data, NSError *error) {
+            if (success && data) {
+                
+                [weakalertview stopActityAndRemoveAlertView];
+                
+                [Utils showSuccess:@"文件夹创建成功" toView:weakTableView finish:nil];
+                //reload.
+                CSFileModel *csfileModel = [CSFileModel mj_objectWithKeyValues:data[@"data"]];
+                
+                csfileModel.serverFullPath = self.father_csFileModel?[NSString stringWithFormat:@"%@%@/",self.father_csFileModel.serverFullPath,csfileModel.name]:[NSString stringWithFormat:@"%@/",csfileModel.name];
+                
+                [kCloudStorageDB addcsFiletoDB:csfileModel];
+                
+                CSFileFrameModel *csframeModel = [[CSFileFrameModel alloc]initWithFileModel:csfileModel];
+                
+                [weakSelf.fileModelArray addObject:csframeModel];
+                
+                [weakTableView reloadData];
+                //                [weakTableView insertRowsAtIndexPaths:@[[NSIndexPath indexPathForRow:[weakTableView numberOfRowsInSection:0] - 1 inSection:0]] withRowAnimation:UITableViewRowAnimationNone];
+                //
+                [weakTableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:weakSelf.fileModelArray.count - 1 inSection:0] atScrollPosition:UITableViewScrollPositionBottom animated:YES];
+            }else{
+                
+                [weakalertview showErrorMsg:@"文件夹创建失败"];
+                NSError *createFolderError = [NSError errorWithDomain:@"com.wswinsoft.zhuxun" code:40002 userInfo:@{@"error":error,@"APIDescription":@"cloudStorageCreateNewFileFolderWithFolderName",@"param":[NSString stringWithFormat:@"foldername:%@ pid:%@",folderName,weakSelf.pid],@"systemerrorinfo":error.userInfo}];
+                [Bugly reportError:createFolderError];
+            }
             
-            [weakalertview showErrorMsg:@"文件夹创建失败"];
-            NSError *createFolderError = [NSError errorWithDomain:@"com.wswinsoft.zhuxun" code:40002 userInfo:@{@"error":error,@"APIDescription":@"cloudStorageCreateNewFileFolderWithFolderName",@"param":[NSString stringWithFormat:@"foldername:%@ pid:%@",folderName,weakSelf.pid],@"systemerrorinfo":error.userInfo}];
-            [Bugly reportError:createFolderError];
-        }
-        
-        //[weakalertview stopActity];
-    }];
-};
-//    CustomAlertView *alertView =
-//    alertVc.messageColor = [UIColor redColor];
-//    [alertVc alertViewControllerWithMessage:@"测试而已" andBlock:^{
-//        NSLog(@"test");
-//    }];
-//    [self.navigationController presentViewController:alertVc animated:NO completion:nil];
-//presentModalViewController:alertVc animated:YES];
-/*UIAlertViewStyle type = UIAlertViewStylePlainTextInput;
- 
- __weak typeof(self)weakSelf = self;
- __weak typeof(self.mainTableView)weakTableView = self.mainTableView;
- 
- //待使用新的createNEWFOLDERVIEW
- [UIAlertView showAlertViewWithType:type Title:@"新建文件夹" message:nil cancelButtonTitle:@"取消" otherButtonTitles:@[@"确定"] onDismiss:^(int buttonIndex, UIAlertView *alertView) {
- 
- 
- UITextField *applyTextField =  [alertView textFieldAtIndex:0];
- 
- if (!applyTextField.text.length) {
- [Utils showError:@"请输入文件夹名称" ToView:weakTableView];
- return ;
- }
- 
- [Utils showWaitingToView:weakTableView];
- #warning 2016-06-20 貌似有连续请求的问题..
- [[HttpRequest sharedManager]cloudStorageCreateNewFileFolderWithFolderName:applyTextField.text pid:weakSelf.pid delflag:@"0" complete:^(BOOL success, id data, NSError *error) {
- 
- [Utils HiddenWaitingToView:weakTableView];
- 
- if (success && data) {
- //
- 
- [Utils showSuccess:@"文件夹创建成功" toView:weakTableView finish:nil];
- 
- //reload.
- 
- CSFileModel *csfileModel = [CSFileModel mj_objectWithKeyValues:data[@"data"]];
- 
- csfileModel.serverFullPath = self.father_csFileModel?[NSString stringWithFormat:@"%@%@/",self.father_csFileModel.serverFullPath,csfileModel.name]:[NSString stringWithFormat:@"%@/",csfileModel.name];
- 
- [CloudStorageDB addcsFiletoDB:csfileModel];
- 
- CSFileFrameModel *csframeModel = [[CSFileFrameModel alloc]initWithFileModel:csfileModel];
- 
- [weakSelf.fileModelArray addObject:csframeModel];
- 
- [weakTableView reloadData];
- //                [weakTableView insertRowsAtIndexPaths:@[[NSIndexPath indexPathForRow:[weakTableView numberOfRowsInSection:0] - 1 inSection:0]] withRowAnimation:UITableViewRowAnimationNone];
- //
- [weakTableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:weakSelf.fileModelArray.count - 1 inSection:0] atScrollPosition:UITableViewScrollPositionBottom animated:YES];
- }else{
- 
- [Utils showError:@"文件夹创建失败" ToView:weakTableView];
- }
- 
- 
- }];
- 
- } onCancel:^(UIAlertView *alertView) {
- 
- }];
- 
- */}
+            //[weakalertview stopActity];
+        }];
+    };
+    //    CustomAlertView *alertView =
+    //    alertVc.messageColor = [UIColor redColor];
+    //    [alertVc alertViewControllerWithMessage:@"测试而已" andBlock:^{
+    //        NSLog(@"test");
+    //    }];
+    //    [self.navigationController presentViewController:alertVc animated:NO completion:nil];
+    //presentModalViewController:alertVc animated:YES];
+    /*UIAlertViewStyle type = UIAlertViewStylePlainTextInput;
+     
+     __weak typeof(self)weakSelf = self;
+     __weak typeof(self.mainTableView)weakTableView = self.mainTableView;
+     
+     //待使用新的createNEWFOLDERVIEW
+     [UIAlertView showAlertViewWithType:type Title:@"新建文件夹" message:nil cancelButtonTitle:@"取消" otherButtonTitles:@[@"确定"] onDismiss:^(int buttonIndex, UIAlertView *alertView) {
+     
+     
+     UITextField *applyTextField =  [alertView textFieldAtIndex:0];
+     
+     if (!applyTextField.text.length) {
+     [Utils showError:@"请输入文件夹名称" ToView:weakTableView];
+     return ;
+     }
+     
+     [Utils showWaitingToView:weakTableView];
+     #warning 2016-06-20 貌似有连续请求的问题..
+     [[HttpRequest sharedManager]cloudStorageCreateNewFileFolderWithFolderName:applyTextField.text pid:weakSelf.pid delflag:@"0" complete:^(BOOL success, id data, NSError *error) {
+     
+     [Utils HiddenWaitingToView:weakTableView];
+     
+     if (success && data) {
+     //
+     
+     [Utils showSuccess:@"文件夹创建成功" toView:weakTableView finish:nil];
+     
+     //reload.
+     
+     CSFileModel *csfileModel = [CSFileModel mj_objectWithKeyValues:data[@"data"]];
+     
+     csfileModel.serverFullPath = self.father_csFileModel?[NSString stringWithFormat:@"%@%@/",self.father_csFileModel.serverFullPath,csfileModel.name]:[NSString stringWithFormat:@"%@/",csfileModel.name];
+     
+     [CloudStorageDB addcsFiletoDB:csfileModel];
+     
+     CSFileFrameModel *csframeModel = [[CSFileFrameModel alloc]initWithFileModel:csfileModel];
+     
+     [weakSelf.fileModelArray addObject:csframeModel];
+     
+     [weakTableView reloadData];
+     //                [weakTableView insertRowsAtIndexPaths:@[[NSIndexPath indexPathForRow:[weakTableView numberOfRowsInSection:0] - 1 inSection:0]] withRowAnimation:UITableViewRowAnimationNone];
+     //
+     [weakTableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:weakSelf.fileModelArray.count - 1 inSection:0] atScrollPosition:UITableViewScrollPositionBottom animated:YES];
+     }else{
+     
+     [Utils showError:@"文件夹创建失败" ToView:weakTableView];
+     }
+     
+     
+     }];
+     
+     } onCancel:^(UIAlertView *alertView) {
+     
+     }];
+     
+     */}
 
 - (void)sortFilesWithSortType:(SortType)sortType
 {
     NSComparator cmptr = nil;
     //本地排序
     if (sortType == SortTypeFileName) {
-         cmptr = ^(CSFileFrameModel *frameModelA, CSFileFrameModel *frameModelB){
+        cmptr = ^(CSFileFrameModel *frameModelA, CSFileFrameModel *frameModelB){
             if (frameModelA.fileModel.name > frameModelB.fileModel.name) {
                 return (NSComparisonResult)NSOrderedDescending;
             }
@@ -815,9 +817,9 @@ alertview.alertresult = ^(NSString *folderName){
             return (NSComparisonResult)NSOrderedSame;
             
         };
-
+        
     }else if(sortType == SortTypeFileTime){
-    
+        
         cmptr = ^(CSFileFrameModel *frameModelA, CSFileFrameModel *frameModelB){
             if (frameModelA.fileModel.server_ctime > frameModelB.fileModel.server_ctime) {
                 return (NSComparisonResult)NSOrderedDescending;
@@ -844,11 +846,15 @@ alertview.alertresult = ^(NSString *folderName){
     if (!self.searchModel) {
         
         //全目录分类,quanbu 时是否不动..
-        [self getFileListWithPid:nil searchKey:nil classExt:[NSString stringWithFormat:@"%d",fileType]];
+        NSString *classExtNumStr = nil;
+        if (fileType != CSFileTypeAll) {
+            classExtNumStr = [NSString stringWithFormat:@"%d",fileType];
+        }
+        [self getFileListWithPid:nil searchKey:nil classExt:classExtNumStr];
         
         
     }else{
-    
+        
         //本地搜索结果分类
         
     }
@@ -859,7 +865,7 @@ alertview.alertresult = ^(NSString *folderName){
     self.searchModel = YES;
     
     [self getFileListWithPid:nil searchKey:content classExt:nil];
-
+    
 }
 
 - (void)shareFilesToUserOrGroups:(NSArray *)fileModels
@@ -892,146 +898,168 @@ alertview.alertresult = ^(NSString *folderName){
     __weak typeof(self.view)weakView = self.view;
 #pragma mark -- 2017-07-26 01文件迁移 serverFullPath未处理 --sql
     navCloud.cloudControlerBlock = ^(NSString *pid, NSString *serverFullPath){
-         [[HttpRequest sharedManager]cloudStorageMoveFilesToOtherPid:pid needMoveFiles:csFileIDsArray complete:^(BOOL success, id data, NSError *error) {
+        [[HttpRequest sharedManager]cloudStorageMoveFilesToOtherPid:pid needMoveFiles:csFileIDsArray complete:^(BOOL success, id data, NSError *error) {
 #warning 2017-07-26 02 文件迁移完成后控制器刷新 未实现
-             //update new files.
-             //[[CloudStorageDB shareInstance]addcsFilestoDB:csFileIDsArray];
-             if (!error&&success) {
-                    [kCloudStorageDB updateCSFilestoDB:csFileIDsArray targetid:pid];
-                 
-                 [Utils showSuccess:@"移动成功" toView:weakView finish:nil];
-             }
-             else{
-                 [Utils showSuccess:@"移动失败" toView:weakView finish:nil];
-             }
-             
-             
-         }];
+            //update new files.
+            //[[CloudStorageDB shareInstance]addcsFilestoDB:csFileIDsArray];
+            if (!error&&success) {
+                [kCloudStorageDB updateCSFilestoDB:csFileIDsArray targetid:pid];
+                
+                [Utils showSuccess:@"移动成功" toView:weakView finish:nil];
+            }
+            else{
+                [Utils showSuccess:@"移动失败" toView:weakView finish:nil];
+            }
+            
+            
+        }];
+        
         
-     
         
         
         
     };
     [self.navigationController presentViewController:navCloud animated:YES completion:nil];
     
-   
+    
 }
 
 - (void)downloadFileWithFileModels:(NSArray *)csfileModels
 {
+    
+    //获取最外层文件夹.
+    //再创建数据库模型,不用考虑重复,uuid相同无法添加
+    //全部丢给tarncenter,相同的uuid会自动过滤.
+    
+    //最后.通知tarns.(如果是文件,带上subfiles.)
+    
+    
+    
+    //先获取所有文件.0
+    NSMutableArray *tempSidsArrray = [NSMutableArray array];
+    
+    //need downfiles0
+    NSMutableArray *totalNeedDownloadFileArray = [NSMutableArray array];
+    
+    //trans show 0
+    NSMutableArray *totalPidZeroDownloadFilesArray = [NSMutableArray array];//缺少返回allsubfiles.
+    
+    //save db for all files.csdownfile *
+    NSMutableArray *totalDBSaveDownloadFilesArray = [NSMutableArray array];
+    
     for (CSFileFrameModel *csFileFrameModel in csfileModels) {
-        [self downloadFileWithFileModel:csFileFrameModel.fileModel];
+        
+        
+        if (csFileFrameModel.fileModel.isdir) {
+            
+            [tempSidsArrray addObject:csFileFrameModel.fileModel.sid];
+            
+        }
+        
+        //创建downupmodel
+        csFileFrameModel.fileModel.pid = @"0";
+        CSFileDownUpModel *newCSFileDownUpModel = [CSFileDownUpModel csfileDownupModelWithfileModel:csFileFrameModel.fileModel downUpType:DownUpModelDown downUpStatus:DownUpStatusWait fileSource:FileSourceCSCloud fileType:FileTypeOther localRootPath:csFileFrameModel.fileModel.name file_category:csFileFrameModel.fileModel.path.pathComponents.count downUpTimeStamp:[NSDate date] downUpUUID:nil downUpSize:0];
+        
+        [totalPidZeroDownloadFilesArray addObject:newCSFileDownUpModel];//need show to transcontroller - done
+        
+        [totalDBSaveDownloadFilesArray addObject:newCSFileDownUpModel]; //need save file/filefolder model
+        
+        if (!newCSFileDownUpModel.isdir) {
+            
+            [totalNeedDownloadFileArray addObject:newCSFileDownUpModel];//need download file
+        }
+        
     }
     
-}
-
-- (void)downloadFileWithFileModel:(CSFileModel *)csfileModel
-{
-    //根据md5和filename 判断文件是否已经下载过.
-#warning 2017-06-29同名文件下载情况, 同文件,同名,则不下载. 不同文件, 同名,则name+1;
-    if (!csfileModel.isdir) {
+    
+    [self getAllFileFoldersFilesWithPidsArray:tempSidsArrray resultBlock:^(NSArray *fileModels) {
         
-        [self downLoadTrueFileWithFileModel:csfileModel];
+        for (CSFileModel *fileModel in fileModels) {
+            
+            //创建downupmodel
+            CSFileDownUpModel *newCSFileDownUpModel = [CSFileDownUpModel csfileDownupModelWithfileModel:fileModel downUpType:DownUpModelDown downUpStatus:DownUpStatusWait fileSource:FileSourceCSCloud fileType:FileTypeOther localRootPath:fileModel.name file_category:fileModel.path.pathComponents.count downUpTimeStamp:[NSDate date] downUpUUID:nil downUpSize:0];
+            
+            [totalDBSaveDownloadFilesArray addObject:newCSFileDownUpModel];
+            
+            if (!fileModel.isdir) {
+                [totalNeedDownloadFileArray addObject:newCSFileDownUpModel];
+            }
+            
+        }
         
-    }else{
-    
-        __weak typeof(self)weakSelf = self;
-        //先判断id和name是否存在...if 文件夹立马通知trans,而文件列表挂了,就有问题了.
+        NSMutableArray *tempUUIDsArray = [NSMutableArray array];
         
+        for (CSFileDownUpModel *csFileDownUpModel in totalDBSaveDownloadFilesArray) {
+            
+            [tempUUIDsArray addObject:[NSString stringWithFormat:@"'%@'",csFileDownUpModel.downUpUUID]];
+            
+        }
         
-        [[HttpRequest sharedManager]cloudStorageGetAllChildsWithPids:@[csfileModel.sid] complete:^(BOOL success, id data, NSError *error) {
+        //过滤数据库中成功的文件.
+        if (tempUUIDsArray.count) {
             
-            if (data && success) {
+            [kCloudStorageDB getCSDownUpFilesWithUUIDs:tempUUIDsArray downUpModel:DownUpModelDown resultBlock:^(NSArray *dbCSFileModels) {
                 
-                [weakSelf createFileFolderWithFileModel:csfileModel needTransCallBlock:YES];
+                //过滤掉成功的.
+                NSArray *successFiles = [dbCSFileModels filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"downUpStatus = %d",DownUpStatusSuccess]];
                 
-                NSArray *fileModels = [CSFileModel mj_objectArrayWithKeyValuesArray:data[@"data"]];
+                NSMutableArray *tempSuccessFilesSortArray = [NSMutableArray array];
                 
-              
-                for (CSFileModel *newCsfileModel in fileModels) {
+                for (CSFileDownUpModel *sortFileDownUpModel in totalDBSaveDownloadFilesArray) {
                     
+                    //if total的在返回的成功列表内能找到,则移除
+                    if ([successFiles filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"downUpUUID = %@",sortFileDownUpModel.downUpUUID]].count) {
+                        
+                        [tempSuccessFilesSortArray addObject:sortFileDownUpModel];
+                    }
                     
-                    if (newCsfileModel.isdir) {
-                        [weakSelf createFileFolderWithFileModel:newCsfileModel needTransCallBlock:NO];//这里不需要block通知trans.
-                    }else [weakSelf downLoadTrueFileWithFileModel:newCsfileModel];
                 }
                 
+                [totalNeedDownloadFileArray removeObjectsInArray:tempSuccessFilesSortArray];
                 
-               
-            }
-            
-        }];
-        
-       
-        
-    }
-   
-}
-
-#warning 2017-07-05同name,同md5文件下载,同时下载有问题,会叠加...
-- (void)downLoadTrueFileWithFileModel:(CSFileModel *)csfileModel
-{
-    //判断是否同一文件(所有信息都相同)
-    [kCloudStorageDB getCSDownUpFileWithMD5:csfileModel.md5  pid:csfileModel.pid name:csfileModel.name downUpModel:DownUpModelDown resultBlock:^(CSFileDownUpModel *sameFileDownUpModel) {
-        
-        if (!sameFileDownUpModel) {
-            
-            //判断是否有同名的文件
-            [kCloudStorageDB getCSDownUpFileSameNameDifMd5WithMD5:csfileModel.md5 name:csfileModel.name downUpModel:DownUpModelDown resultBlock:^(CSFileDownUpModel *sameNameFileDownUpModel) {
-                
-                if (sameNameFileDownUpModel) {
+                if (totalNeedDownloadFileArray.count) {
+                    
+                    [kCloudStorageDB addCSDownUpFilesToDB:totalDBSaveDownloadFilesArray downUpModel:DownUpModelDown];
                     
-                    csfileModel.name = [NSString stringWithFormat:@"%@_%f",csfileModel.name,[[NSDate date] timeIntervalSince1970]*1000.0f];
+                    CSTabBarController *iwNav = (CSTabBarController *)self.tabBarController;
+                    if (iwNav.cloudControlerFileDownloadBlock) {
+                        iwNav.cloudControlerFileDownloadBlock(totalPidZeroDownloadFilesArray);
+                    }
+                    
+                    //downUpFiles
+                    //待过滤successfiles
+                    [[CloudStorageDownloadCenter sharedInstance]addOneDownloadWithFileDownUpModels:totalNeedDownloadFileArray];
                     
                 }
-                //新建下载self.father_csFileModel.serverFullPath.pathComponents.count
-                CSFileDownUpModel *newCSFileDownUpModel = [CSFileDownUpModel csfileDownupModelWithfileModel:csfileModel downUpType:DownUpModelDown downUpStatus:DownUpStatusWait fileSource:FileSourceCSCloud fileType:FileTypeOther localRootPath:csfileModel.name file_category:csfileModel.path.pathComponents.count downUpTimeStamp:[NSDate date] downUpUUID:nil downUpSize:0];
-                
-                [kCloudStorageDB addCSDownUpFileToDB:newCSFileDownUpModel];
-                
-                [[CloudStorageDownloadCenter sharedInstance]addOneDownloadWithFileDownUpModel:newCSFileDownUpModel];
-                
                 
             }];
-            
-        }else if(sameFileDownUpModel.downUpStatus != DownUpStatusSuccess){
-            
-#warning 2017-07-05 同一文件只需下载一个任务就行,其余进度状态直接使用数据库直接更新.
-
-            [[CloudStorageDownloadCenter sharedInstance]addOneDownloadWithFileDownUpModel:sameFileDownUpModel];
-            //继续下载,OR NO ACTION.
         }
         
+        
     }];
+    
+    
+    
 }
 
-#warning 2017-07-05 cagetory=0 的情况未通知到transconttoler.
-//进行文件夹是否存在判断.
-- (void)createFileFolderWithFileModel:(CSFileModel *)csfileModel needTransCallBlock:(BOOL)needTransCallBlock
+
+- (void)getAllFileFoldersFilesWithPidsArray:(NSArray *)pidsArray resultBlock:(void(^)(NSArray *fileModels))resultBlock
 {
-    [kCloudStorageDB getCSDownUpFolderWithID:csfileModel.sid isdir:csfileModel.isdir name:csfileModel.name category:csfileModel.path.pathComponents.count downUpModel:DownUpModelDown resultBlock:^(CSFileDownUpModel *csFileDownUpModel) {
-        
-        if (!csFileDownUpModel) {
-            
-            csFileDownUpModel = [CSFileDownUpModel csfileDownupModelWithfileModel:csfileModel downUpType:DownUpModelDown downUpStatus:DownUpStatusWait fileSource:FileSourceCSCloud fileType:FileTypeOther localRootPath:nil file_category:csfileModel.path.pathComponents.count downUpTimeStamp:[NSDate date] downUpUUID:nil downUpSize:0];
-            
-            [kCloudStorageDB addCSDownUpFileToDB:csFileDownUpModel];
-            
-            //如果有成功的,则更新文件夹result.
-            [kCloudStorageDB getCSDownUpFolderAndSetSameStatusWithID:csFileDownUpModel.sid downUpModel:csFileDownUpModel.downUpType];
-            
-            //通知translist.
-            IWNavigationController *iwNav = (IWNavigationController *)self.navigationController;
-            if (iwNav.cloudControlerDBBlock && needTransCallBlock) {
-                iwNav.cloudControlerDBBlock(csFileDownUpModel);
-            }
+    
+    if (pidsArray) {
+        [[HttpRequest sharedManager]cloudStorageGetAllChildsWithPids:pidsArray complete:^(BOOL success, id data, NSError *error) {
             
+            if (data && success) {
+                NSArray *fileModels = [CSFileModel mj_objectArrayWithKeyValuesArray:data[@"data"]];
+                
+                resultBlock(fileModels);
+                
+                //resultBlock();
+            }else resultBlock(nil);
             
-       
-        }
-        
-    }];
+        }];
+    }else resultBlock(nil);
+    
 }
 
 
@@ -1041,15 +1069,10 @@ alertview.alertresult = ^(NSString *folderName){
     
     __weak typeof(self)weakSelf = self;
     __weak typeof(self.mainTableView)weakTableView = self.mainTableView;
-    if ([ext isEqualToString:@"-1"])//all
-    {
-        ext = nil;
-        key = nil;
-    }
-    else if ([ext isEqualToString:@"5"])//audioothertyper
-    {
-        return;
-    }
+    __weak typeof(self.view)weakView = self.view;
+    
+    [Utils showWaitingToView:self.view];
+    
     [[HttpRequest sharedManager]cloudStorageGetFilesWithPid:pid searchKey:key ext:ext complete:^(BOOL success, id data, NSError *error) {
         
         if (success && data) {
@@ -1062,19 +1085,28 @@ alertview.alertresult = ^(NSString *folderName){
                     
                 }else fileModel.serverFullPath = self.father_csFileModel?[NSString stringWithFormat:@"%@%@",self.father_csFileModel.serverFullPath,fileModel.name]:[NSString stringWithFormat:@"%@",fileModel.name];;
                 
-                if (weakSelf.csFileSourceType == CSFileSourceTypeSelf) {
-                    [kCloudStorageDB addcsFiletoDB:fileModel];
-                }
-                
-                
                 CSFileFrameModel *csFileFrameModel = [[CSFileFrameModel alloc]initWithFileModel:fileModel];
                 [weakSelf.fileModelArray addObject:csFileFrameModel];
                 
             }
             
+            [Utils HiddenWaitingToView:weakView];
+            
             [weakTableView reloadData];
+            
+            
+            
+            if (weakSelf.csFileSourceType == CSFileSourceTypeSelf) {
+                
+                dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
+                    [kCloudStorageDB addcsFilestoDB:fileDataModel];
+                });
+                
+            }
         }else{
-        
+            
+            [Utils HiddenWaitingToView:weakView];
+            
             [kCloudStorageDB getAllCloudFilesWithPid:pid resultBlock:^(NSArray *result) {
                 
                 for (CSFileModel *fileModel in result) {

+ 30 - 9
WSCloudStorage/CloudStorage/CSTabBarController.m

@@ -10,8 +10,9 @@
 #import "IWNavigationController.h"
 
 #import "CSFirstPageController.h"
+#import "ShareListViewController.h"
 #import "CSFileTransListController.h"
-
+#import "PreferencesViewController.h"
 
 #import "CloudStorageDownloadCenter.h"
 #import "CloudStorageUploadCenter.h"
@@ -27,26 +28,46 @@
     
     UIImage* nv1Img = [UIImage imageNamed:@"msg_icon"];
     UIImage* nv1SelImg = [[UIImage imageNamed:@"msg_icon_sel"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
-    nv1.tabBarItem = [[UITabBarItem alloc]initWithTitle:@"盘" image:nv1Img selectedImage:nv1SelImg];
+    nv1.tabBarItem = [[UITabBarItem alloc]initWithTitle:@"盘" image:nv1Img selectedImage:nv1SelImg];
     nv1.tabBarItem.tag=0;//113, 200, 242
     NSDictionary *attributes = [NSDictionary dictionaryWithObject:RGB(111, 200, 244) forKey:NSForegroundColorAttributeName];
     [nv1.tabBarItem setTitleTextAttributes:attributes forState:UIControlStateSelected];
     
-    BaseViewController *vc2 = [[CSFileTransListController alloc] init];
+    BaseViewController *vc2 = [[ShareListViewController alloc] init];
     IWNavigationController *nv2 = [self allocNavgationController:vc2];
     
     UIImage* nv2Img = [UIImage imageNamed:@"msg_icon"];
     UIImage* nv2SelImg = [[UIImage imageNamed:@"msg_icon_sel"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
-    nv2.tabBarItem = [[UITabBarItem alloc]initWithTitle:@"传输列表" image:nv2Img selectedImage:nv2SelImg];
+    nv2.tabBarItem = [[UITabBarItem alloc]initWithTitle:@"分享" image:nv2Img selectedImage:nv2SelImg];
     nv2.tabBarItem.tag=1;//113, 200, 242
     [nv2.tabBarItem setTitleTextAttributes:attributes forState:UIControlStateSelected];
   
-    self.viewControllers = @[nv1, nv2];
+    BaseViewController *vc3 = [[CSFileTransListController alloc] init];
+    IWNavigationController *nv3 = [self allocNavgationController:vc2];
+    
+    UIImage* nv3Img = [UIImage imageNamed:@"msg_icon"];
+    UIImage* nv3SelImg = [[UIImage imageNamed:@"msg_icon_sel"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
+    nv3.tabBarItem = [[UITabBarItem alloc]initWithTitle:@"传输列表" image:nv2Img selectedImage:nv2SelImg];
+    nv3.tabBarItem.tag=2;//112, 200, 242
+    [nv3.tabBarItem setTitleTextAttributes:attributes forState:UIControlStateSelected];
+    
+    BaseViewController *vc4 = [[PreferencesViewController alloc] init];
+    IWNavigationController *nv4 = [self allocNavgationController:vc2];
+    
+    UIImage* nv4Img = [UIImage imageNamed:@"msg_icon"];
+    UIImage* nv4SelImg = [[UIImage imageNamed:@"msg_icon_sel"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
+    nv4.tabBarItem = [[UITabBarItem alloc]initWithTitle:@"更多" image:nv2Img selectedImage:nv2SelImg];
+    nv4.tabBarItem.tag=3;//113, 200, 242
+    [nv4.tabBarItem setTitleTextAttributes:attributes forState:UIControlStateSelected];
+    self.viewControllers = @[nv1, nv2,nv3,nv4];
     
     
     //认证
     __weak typeof(self)weakSelf = self;
-    
+    //临时传入自己的号
+    [userDefaults setObject:@"hxb" forKey:USERDEFAULT_LOGIN_NAME];
+    [userDefaults setObject:@"e9bc0e13a8a16cbb07b175d92a113126" forKey:USERDEFAULT_PASSWORD];
+    [userDefaults setObject:@"WSPROD" forKey:USERDEFAULT_SERVER_ID];
     [self doLoginResultBlock:^(bool result){
         
         if (result) {
@@ -102,9 +123,9 @@
 -(IWNavigationController*)allocNavgationController:(UIViewController*)vc{
     IWNavigationController* nav = [[IWNavigationController alloc] initWithRootViewController:vc];
     
-    //    UIImage* navbg = [UIImage imageNamed:@"top_nav"] ;
-    //    navbg = [navbg stretchableImageWithLeftCapWidth:0 topCapHeight:5];
-    //    [nav.navigationBar setBackgroundImage:navbg forBarMetrics:UIBarMetricsDefault];
+        UIImage* navbg = [UIImage imageNamed:@"top_nav"] ;
+        navbg = [navbg stretchableImageWithLeftCapWidth:0 topCapHeight:5];
+        [nav.navigationBar setBackgroundImage:navbg forBarMetrics:UIBarMetricsDefault];
     return nav;
 }
 @end

+ 8 - 0
WSCloudStorage/CloudStorage/DB/CloudStorageDB.m

@@ -37,8 +37,16 @@ static CloudStorageDB *cloudStorageDB;
         
         
         NSString *localPath = [NSPersistentStore MR_defaultLocalStoreUrl].absoluteString.stringByDeletingLastPathComponent;
+        
         NSString *path = [NSString stringWithFormat:@"%@/%@_cloudStorageDisk.sqlite",localPath,Login_Name];
+        NSFileManager *filemanager = [NSFileManager defaultManager];
+        
+        NSString *libraryPathstr = [NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES) lastObject];
+        NSString *applicationsupportdir = [libraryPathstr stringByAppendingString:@"/Application Support"];
         
+        NSError *error;
+        BOOL resultlocalpath = [filemanager createDirectoryAtPath:applicationsupportdir withIntermediateDirectories:YES attributes:nil error:&error];
+        NSString *dbpath =
         //创建表
         self.dbOperation = [DBOperation dbOperationWithPath:path];
         

+ 3 - 1
WSCloudStorage/CloudStorage/cloudStorageDown_UpCenter/download/CloudStorageDownloadCenter.h

@@ -22,8 +22,10 @@ typedef void (^FileDownStatusChangeBlock)(CSFileDownUpModel *csfileDownUpModel);
 @property (nonatomic , strong) FileDownStatusChangeBlock fileDownStatusChangeBlock;
 
 - (void)addOneDownloadWithFileDownUpModel:(CSFileDownUpModel *)fileDownUpModel;
+- (void)addOneDownloadWithFileDownUpModels:(NSArray *)fileDownUpModels;
 
-- (void)registeDownloadBlockForUIWithUUID:(NSString *)UUID ProcessBlock:(DownloadProgressUIBlock)processBlock successBlock:(DownloadSuccessUIBlock)successBlock failBlock:(DownloadFailedUIBlock)failBlock;
+
+- (void)registeDownloadBlockForUIWithcsFileDownUpModel:(CSFileDownUpModel *)csFileDownUpModel ProcessBlock:(DownloadProgressUIBlock)processBlock successBlock:(DownloadSuccessUIBlock)successBlock failBlock:(DownloadFailedUIBlock)failBlock;
 
 - (void)updateOneDownloadStatusWithcsfileDownUpModel:(CSFileDownUpModel *)fileDownUpModel downUpStatus:(DownUpStatus)downUpStatus;
 - (void)updateDownloadStatusWithcsfileDownUpModels:(NSArray<CSFileDownUpModel *> *)csfileDownUpModels downUpStatus:(DownUpStatus)downUpStatus;

+ 97 - 84
WSCloudStorage/CloudStorage/cloudStorageDown_UpCenter/download/CloudStorageDownloadCenter.m

@@ -73,7 +73,7 @@ static CloudStorageDownloadCenter *cloudStorageDownloadCenter;
 - (CGFloat)maxConcurrenceDownloadCount
 {
     //数据库设计..
-    return 5;
+    return 1;
 }
 
 //获取md5+name 的operation
@@ -85,7 +85,7 @@ static CloudStorageDownloadCenter *cloudStorageDownloadCenter;
     
     //self.name,self.md5  name_md5
     for (NSString *allUUID in self.maxConcurrenceDownloadTasks.allKeys) {
-   
+        
         if ([searchNameAndMd5 isEqualToString:allUUID]) {
             
             hasSameFile = YES;
@@ -98,19 +98,19 @@ static CloudStorageDownloadCenter *cloudStorageDownloadCenter;
     return hasSameFile;
 }
 
-- (NSString *)getTrueFileNmae_Md5:(NSString *)downUpUUID
+- (NSString *)getTrueFileNmae_Md5:(CSFileDownUpModel *)csFileDownUpModel
 {
-    NSString *searchNameAndMd5= [NSString stringWithFormat:@"%@_%@",[downUpUUID componentsSeparatedByString:@"_"][0],[downUpUUID componentsSeparatedByString:@"_"][1]];
+    NSString *searchNameAndMd5= [NSString stringWithFormat:@"%@_%@",csFileDownUpModel.name,csFileDownUpModel.md5];
     return searchNameAndMd5;
 }
 
 - (void)addOneDownloadWithFileDownUpModel:(CSFileDownUpModel *)fileDownUpModel
 {
     //判断是否重复
-    if ([self.totalDownloadTasks objectForKey:fileDownUpModel.downUpUUID]|| fileDownUpModel.isdir) {
+    if ([self.totalDownloadTasks objectForKey:fileDownUpModel.downUpUUID]||[self.maxConcurrenceDownloadTasks objectForKey:[self getTrueFileNmae_Md5:fileDownUpModel]] ||fileDownUpModel.isdir) {
         return;
     }
-
+    
     //无论成功还是失败还是暂停,都要对队列进行重新排序
     
     //进行队列初始化.,如果其中排队的某个暂停,则对其进行重新排队. a->b->c ,if b pause, a.next = b.next
@@ -128,9 +128,10 @@ static CloudStorageDownloadCenter *cloudStorageDownloadCenter;
     
     _lastOneDowunUpModel = fileDownUpModel;
     
+    DownUpStatus oldStatus = fileDownUpModel.downUpStatus;
     //待存储.并通知translistcontroller.
     fileDownUpModel.downUpStatus = DownUpStatusWait;
-  
+    
     //先获取所有需要下载的文件.
     if (!fileDownUpModel.isdir) {
         
@@ -140,10 +141,21 @@ static CloudStorageDownloadCenter *cloudStorageDownloadCenter;
             
             [self startOneDownloadWithDownUpFileModel:fileDownUpModel];
         }
-    
+        
         
     }
+    
+    if (oldStatus != fileDownUpModel.downUpStatus) {
+        [kCloudStorageDB updateCSDownUpFileStatusWithCSFileDownUpModel:fileDownUpModel];
+    }
+    
+}
 
+- (void)addOneDownloadWithFileDownUpModels:(NSArray *)fileDownUpModels
+{
+    for (CSFileDownUpModel *csFileDownUpModel in fileDownUpModels) {
+        [self addOneDownloadWithFileDownUpModel:csFileDownUpModel];
+    }
 }
 
 
@@ -152,8 +164,12 @@ static CloudStorageDownloadCenter *cloudStorageDownloadCenter;
 
 - (void)startOneDownloadWithDownUpFileModel:(CSFileDownUpModel *)fileDownUpModel
 {
-
-#warning 2017-07-19 待加入一个最大限制判断
+    
+    //延迟1秒的目的: 完成task的cell更新和下一条进行更新的cell不同时进行reloaddata
+    
+    //    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1*NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
+    
+    
     if (!fileDownUpModel || self.maxConcurrenceDownloadTasks.allKeys.count >= self.maxConcurrenceDownloadCount) {
         return;
     }
@@ -161,18 +177,21 @@ static CloudStorageDownloadCenter *cloudStorageDownloadCenter;
     //待存储.并通知translistcontroller.
     fileDownUpModel.downUpStatus = DownUpStatusDoing;
     
-    [kCloudStorageDB updateCSDownUpFileStatusWithCSFileDownUpModel:fileDownUpModel];
-    
     CloudDownloadSession *csDownUpSession  = nil;
     
     if ([self judgeSameFileIsProcessWithFileDownUpModel:fileDownUpModel]) {
-
-        csDownUpSession = [self.maxConcurrenceDownloadTasks objectForKey:[self getTrueFileNmae_Md5:fileDownUpModel.downUpUUID]];
         
-    }else csDownUpSession= [CloudDownloadSession startDownloadFileWithFileDownUpModel:fileDownUpModel];
+        csDownUpSession = [self.maxConcurrenceDownloadTasks objectForKey:[self getTrueFileNmae_Md5:fileDownUpModel]];
         
-    csDownUpSession.downloadSuccessDBBlock = ^(NSInteger receivedSize,NSString *localFullFileRouter,CSFileDownUpModel *fileDownUpModel,NSString *uuid){
+    }else{
+        
+        csDownUpSession= [CloudDownloadSession startDownloadFileWithFileDownUpModel:fileDownUpModel];
+        
+        [self.maxConcurrenceDownloadTasks setObject:csDownUpSession forKey:[self getTrueFileNmae_Md5:fileDownUpModel]];
+    }
     
+    csDownUpSession.downloadSuccessDBBlock = ^(NSInteger receivedSize,NSString *localFullFileRouter,CSFileDownUpModel *fileDownUpModel,NSString *uuid){
+        
         
         //重新排队
         if (fileDownUpModel.lastFileDownUpModel && fileDownUpModel.nextFileDownUpModel) {
@@ -192,9 +211,9 @@ static CloudStorageDownloadCenter *cloudStorageDownloadCenter;
         }
 #warning 2017-07-18
         //待移步至二层operation,且设置时间1s存储一次.
-//        [CloudStorageDB updateCSDownUpFileStatusWithCSFileDownUpModel:fileDownUpModel];
+        //        [CloudStorageDB updateCSDownUpFileStatusWithCSFileDownUpModel:fileDownUpModel];
         
-        [weakself.maxConcurrenceDownloadTasks removeObjectForKey:[self getTrueFileNmae_Md5:fileDownUpModel.downUpUUID]];
+        [weakself.maxConcurrenceDownloadTasks removeObjectForKey:[self getTrueFileNmae_Md5:fileDownUpModel]];
         [weakself.totalDownloadTasks removeObjectForKey:fileDownUpModel.downUpUUID];
         
         if ([_firstOneDowunUpModel.downUpUUID isEqualToString:fileDownUpModel.downUpUUID]) {
@@ -206,17 +225,17 @@ static CloudStorageDownloadCenter *cloudStorageDownloadCenter;
         }
         
         [weakself queueForMuiltTastWithFinishedModel:weakself.firstOneDowunUpModel currentMaxTaskCount:weakself.maxConcurrenceDownloadTasks.allValues.count];
-//        [weakself queueForTaskNextWithFinishedModel:weakself.firstOneDowunUpModel];
+        //        [weakself queueForTaskNextWithFinishedModel:weakself.firstOneDowunUpModel];
     };
     
     csDownUpSession.downloadProgressDBBlock = ^(NSInteger receivedSize, NSInteger expectedSize, CGFloat progress,NSString *router,CSFileDownUpModel *fileDownUpModel,NSString *uuid){
-    
-//         [CloudStorageDB updateCSDownUpFileStatusWithCSFileDownUpModel:fileDownUpModel];
+        
+        //         [CloudStorageDB updateCSDownUpFileStatusWithCSFileDownUpModel:fileDownUpModel];
     };
     
     csDownUpSession.downloadFailedDBBlock = ^(NSString* errMessage,CSFileDownUpModel *fileDownUpModel,NSString *uuid){
         
-
+        
         
         //重新排队
         if (fileDownUpModel.lastFileDownUpModel && fileDownUpModel.nextFileDownUpModel) {
@@ -237,10 +256,10 @@ static CloudStorageDownloadCenter *cloudStorageDownloadCenter;
         
         
         
-//         [CloudStorageDB updateCSDownUpFileStatusWithCSFileDownUpModel:fileDownUpModel];
-    
-         [weakself.maxConcurrenceDownloadTasks removeObjectForKey:[self getTrueFileNmae_Md5:fileDownUpModel.downUpUUID]];
-         [weakself.totalDownloadTasks removeObjectForKey:fileDownUpModel.downUpUUID];
+        //         [CloudStorageDB updateCSDownUpFileStatusWithCSFileDownUpModel:fileDownUpModel];
+        
+        [weakself.maxConcurrenceDownloadTasks removeObjectForKey:[self getTrueFileNmae_Md5:fileDownUpModel]];
+        [weakself.totalDownloadTasks removeObjectForKey:fileDownUpModel.downUpUUID];
         
         if ([_firstOneDowunUpModel.downUpUUID isEqualToString:fileDownUpModel.downUpUUID]) {
             _firstOneDowunUpModel = nil;
@@ -251,25 +270,16 @@ static CloudStorageDownloadCenter *cloudStorageDownloadCenter;
         }
         //下一个.
         [weakself queueForMuiltTastWithFinishedModel:weakself.firstOneDowunUpModel currentMaxTaskCount:weakself.maxConcurrenceDownloadTasks.allValues.count];
-//        [weakself queueForTaskNextWithFinishedModel:weakself.firstOneDowunUpModel];
+        
     };
-#warning 2017-06-29...待新增回调及数据库更新...
     
-    //success or failure need remove
+    //通知UI开始任务
+    if (weakself.fileDownStatusChangeBlock) {
+        weakself.fileDownStatusChangeBlock(fileDownUpModel);
+    }
     
-//    [self.totalDownloadTasks removeObjectForKey:fileDownUpModel.downUpUUID];
     
-    [self.maxConcurrenceDownloadTasks setObject:csDownUpSession forKey:[self getTrueFileNmae_Md5:fileDownUpModel.downUpUUID]];
-    
-    //延迟1秒的目的: 完成task的cell更新和下一条进行更新的cell不同时进行reloaddata
-//    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1*NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
-    
-        //通知UI开始任务
-        if (weakself.fileDownStatusChangeBlock) {
-            weakself.fileDownStatusChangeBlock(fileDownUpModel);
-        }
-        
-//    });
+    //   });
     
     
 }
@@ -282,18 +292,18 @@ static CloudStorageDownloadCenter *cloudStorageDownloadCenter;
 //    if (csfileDownUpModel.downUpStatus == DownUpStatusWait && csfileDownUpModel) {
 //        [self startOneDownloadWithDownUpFileModel:csfileDownUpModel];
 //    }else{
-//    
+//
 //        //递归获取nextwait
 //       [self getQueueUntileWaitTaskWithFinishedModel:csfileDownUpModel resultBlock:^(CSFileDownUpModel *nextFileDownUpModel) {
-//          
+//
 //           if (nextFileDownUpModel) {
 //                [weakSelf startOneDownloadWithDownUpFileModel:nextFileDownUpModel];
 //           }
-//          
-//           
+//
+//
 //       }];
 //    }
-//    
+//
 //}
 
 //开始(可能的)多个任务.
@@ -325,7 +335,7 @@ static CloudStorageDownloadCenter *cloudStorageDownloadCenter;
         }
         
     }
-   
+    
 }
 
 //查询下一个任务
@@ -335,7 +345,7 @@ static CloudStorageDownloadCenter *cloudStorageDownloadCenter;
         resultBlock(nil);
         return;
     }
-
+    
     if (csfileDownUpModel.nextFileDownUpModel) {
         if (csfileDownUpModel.nextFileDownUpModel.downUpStatus == DownUpStatusDoing) {
             
@@ -346,35 +356,35 @@ static CloudStorageDownloadCenter *cloudStorageDownloadCenter;
         }else if(csfileDownUpModel.nextFileDownUpModel.downUpStatus == DownUpStatusWait)resultBlock(csfileDownUpModel.nextFileDownUpModel);
         
     }else resultBlock(nil);
- 
+    
     
 }
 
 
-- (void)registeDownloadBlockForUIWithUUID:(NSString *)UUID ProcessBlock:(DownloadProgressUIBlock)processBlock successBlock:(DownloadSuccessUIBlock)successBlock failBlock:(DownloadFailedUIBlock)failBlock
+- (void)registeDownloadBlockForUIWithcsFileDownUpModel:(CSFileDownUpModel *)csFileDownUpModel ProcessBlock:(DownloadProgressUIBlock)processBlock successBlock:(DownloadSuccessUIBlock)successBlock failBlock:(DownloadFailedUIBlock)failBlock
 {
-    CloudDownloadSession *csDownUpSession = [self.maxConcurrenceDownloadTasks objectForKey:[self getTrueFileNmae_Md5:UUID]];
+    CloudDownloadSession *csDownUpSession = [self.maxConcurrenceDownloadTasks objectForKey:[self getTrueFileNmae_Md5:csFileDownUpModel]];
     
     if (csDownUpSession) {
-        [csDownUpSession giveBlockToUIWithUUID:UUID withProcessBlock:processBlock successBlock:successBlock failBlock:failBlock];
+        [csDownUpSession giveBlockToUIWithUUID:csFileDownUpModel.downUpUUID withProcessBlock:processBlock successBlock:successBlock failBlock:failBlock];
         
     }
 }
 
-- (void)registeDownloadBlockForUIWithUUIDs:(NSArray *)UUIDs ProcessBlock:(DownloadProgressUIBlock)processBlock successBlock:(DownloadSuccessUIBlock)successBlock failBlock:(DownloadFailedUIBlock)failBlock
-{
-   
-    for (NSString *uuid in UUIDs) {
-        
-        CloudDownloadSession *csDownUpSession = [self.maxConcurrenceDownloadTasks objectForKey:[self getTrueFileNmae_Md5:uuid]];
-        
-        if (csDownUpSession) {
-            [csDownUpSession giveBlockToUIWithUUID:uuid withProcessBlock:processBlock successBlock:successBlock failBlock:failBlock];
-            break;
-        }else continue;
-        
-    }
-}
+//- (void)registeDownloadBlockForUIWithUUIDs:(NSArray *)UUIDs ProcessBlock:(DownloadProgressUIBlock)processBlock successBlock:(DownloadSuccessUIBlock)successBlock failBlock:(DownloadFailedUIBlock)failBlock
+//{
+//
+//    for (NSString *uuid in UUIDs) {
+//
+//        CloudDownloadSession *csDownUpSession = [self.maxConcurrenceDownloadTasks objectForKey:[self getTrueFileNmae_Md5:uuid]];
+//
+//        if (csDownUpSession) {
+//            [csDownUpSession giveBlockToUIWithUUID:uuid withProcessBlock:processBlock successBlock:successBlock failBlock:failBlock];
+//            break;
+//        }else continue;
+//
+//    }
+//}
 
 #warning 2017-07-18 待新增两个方法.
 //只适用于单个任务,如果多任务,则队列需要重新整理.
@@ -383,20 +393,20 @@ static CloudStorageDownloadCenter *cloudStorageDownloadCenter;
     __weak typeof(self)weakself = self;
     if (downUpStatus == DownUpStatusWait) {
         
-    
+        
         [self addOneDownloadWithFileDownUpModel:csfileDownUpModel];
         
     }else{
-
+        
         CSFileDownUpModel *oldFilDownUpModel = [self.totalDownloadTasks objectForKey:csfileDownUpModel.downUpUUID];
         
-        CloudDownloadSession *cloudUploadingSession = [self.maxConcurrenceDownloadTasks objectForKey:[self getTrueFileNmae_Md5:csfileDownUpModel.downUpUUID]];
+        CloudDownloadSession *cloudUploadingSession = [self.maxConcurrenceDownloadTasks objectForKey:[self getTrueFileNmae_Md5:csfileDownUpModel]];
         
         if (cloudUploadingSession) {
             
             [cloudUploadingSession cancerDownLoad];
             
-            [self.maxConcurrenceDownloadTasks removeObjectForKey:[self getTrueFileNmae_Md5:csfileDownUpModel.downUpUUID]];
+            [self.maxConcurrenceDownloadTasks removeObjectForKey:[self getTrueFileNmae_Md5:csfileDownUpModel]];
         }
         
         if (oldFilDownUpModel) {
@@ -419,9 +429,9 @@ static CloudStorageDownloadCenter *cloudStorageDownloadCenter;
             }
             
             //next down(最大5个.)
-        
+            
             [self queueForMuiltTastWithFinishedModel:self.firstOneDowunUpModel currentMaxTaskCount:self.maxConcurrenceDownloadTasks.allValues.count];
-//            [self queueForTaskNextWithFinishedModel:weakself.firstOneDowunUpModel];
+            //            [self queueForTaskNextWithFinishedModel:weakself.firstOneDowunUpModel];
             
             
             [self.totalDownloadTasks removeObjectForKey:csfileDownUpModel.downUpUUID];
@@ -435,11 +445,11 @@ static CloudStorageDownloadCenter *cloudStorageDownloadCenter;
             }
         }
         
-
+        
         
     }
     
-   
+    
 }
 
 //注意队列线程安全
@@ -451,26 +461,26 @@ static CloudStorageDownloadCenter *cloudStorageDownloadCenter;
     if (downUpStatus == DownUpStatusWait) {
         
         for (CSFileDownUpModel *csfileDownUpModel in csfileDownUpModels){
- 
+            
             [self addOneDownloadWithFileDownUpModel:csfileDownUpModel];
             
         }
         
     }else{
-    
-    
+        
+        
         //先移除进行中的任务
         for (CSFileDownUpModel *csfileDownUpModel in csfileDownUpModels){
             
             CSFileDownUpModel *oldFilDownUpModel = [self.totalDownloadTasks objectForKey:csfileDownUpModel.downUpUUID];
             
-            CloudDownloadSession *cloudUploadingSession = [self.maxConcurrenceDownloadTasks objectForKey:[self getTrueFileNmae_Md5:csfileDownUpModel.downUpUUID]];
+            CloudDownloadSession *cloudUploadingSession = [self.maxConcurrenceDownloadTasks objectForKey:[self getTrueFileNmae_Md5:csfileDownUpModel]];
             
             if (cloudUploadingSession) {
                 
                 [cloudUploadingSession cancerDownLoad];
                 
-                [self.maxConcurrenceDownloadTasks removeObjectForKey:[self getTrueFileNmae_Md5:csfileDownUpModel.downUpUUID]];
+                [self.maxConcurrenceDownloadTasks removeObjectForKey:[self getTrueFileNmae_Md5:csfileDownUpModel]];
             }
             
             if (oldFilDownUpModel) {
@@ -491,7 +501,7 @@ static CloudStorageDownloadCenter *cloudStorageDownloadCenter;
                     weakself.firstOneDowunUpModel = oldFilDownUpModel.nextFileDownUpModel;
                     
                 }
-               
+                
                 //待使用category.反之key=nil的情况.
                 [self.totalDownloadTasks removeObjectForKey:csfileDownUpModel.downUpUUID];
                 
@@ -504,16 +514,19 @@ static CloudStorageDownloadCenter *cloudStorageDownloadCenter;
                 }
             }
             
+            
         }
         
-
-        [self queueForMuiltTastWithFinishedModel:self.firstOneDowunUpModel currentMaxTaskCount:self.maxConcurrenceDownloadTasks.allValues.count];
-        
         
+        [self queueForMuiltTastWithFinishedModel:self.firstOneDowunUpModel currentMaxTaskCount:self.maxConcurrenceDownloadTasks.allValues.count];
         
+        //同时更新2000多个.
+        //             [kCloudStorageDB updateCSDownUpFileStatusWithCSFileDownUpModel:csfileDownUpModel];
     }
     
-
+    if (downUpStatus !=  DownUpStatusDelete) {
+        [kCloudStorageDB updateCSDownUpFileStatusWithCSFileDownUpModels:csfileDownUpModels downUpType:DownUpModelDown downUpStatus:downUpStatus];
+    }
     
 }
 @end

+ 2 - 2
WSCloudStorage/CloudStorage/cloudStorageDown_UpCenter/upload/CloudStorageUploadCenter.h

@@ -20,7 +20,7 @@ typedef void (^FileUpStatusChangeBlock)(CSFileDownUpModel *csfileDownUpModel);
 
 - (void)addOneFileToUpdateWithCSFileDownUpModel:(CSFileDownUpModel *)fileDownUpModel;
 
-- (void)registeUploadForUIWithUUID:(NSString *)UUID ProcessBlock:(CSUploadProgressUIBlock)processBlock successBlock:(CSUploadSuccessUIBlock)successBlock failBlock:(CSUploadFailedUIBlock)failBlock;
+- (void)registeUploadForUIWithcsFileDownUpModel:(CSFileDownUpModel *)csFileDownUpModel ProcessBlock:(CSUploadProgressUIBlock)processBlock successBlock:(CSUploadSuccessUIBlock)successBlock failBlock:(CSUploadFailedUIBlock)failBlock;
 
 /**
  *  外部更新下载操作,暂停,下载
@@ -28,5 +28,5 @@ typedef void (^FileUpStatusChangeBlock)(CSFileDownUpModel *csfileDownUpModel);
  *  @param csfileDownUpModel csfileDownUpModel
  */
 - (void)updateOneUploadStatusWithcsfileDownUpModel:(CSFileDownUpModel *)csfileDownUpModel downUpStatus:(DownUpStatus)downUpStatus;
-- (void)updateOneUploadStatusWithcsfileDownUpModels:(NSArray <CSFileDownUpModel *> *)csfileDownUpModels downUpStatus:(DownUpStatus)downUpStatus;
+- (void)updateUploadStatusWithcsfileDownUpModels:(NSArray <CSFileDownUpModel *> *)csfileDownUpModels downUpStatus:(DownUpStatus)downUpStatus;
 @end

+ 100 - 60
WSCloudStorage/CloudStorage/cloudStorageDown_UpCenter/upload/CloudStorageUploadCenter.m

@@ -86,7 +86,7 @@ static CloudStorageUploadCenter *cloudStorageUploadCenter;
 //    //线程数量最大值
 //    _taskQueue.maxConcurrentOperationCount = self.maxConcurrenceUploadCount;
 //    //    }
-//    
+//
 //    return _taskQueue;
 //}
 
@@ -98,10 +98,38 @@ static CloudStorageUploadCenter *cloudStorageUploadCenter;
     return 1;
 }
 
+//获取md5+name 的operation
+- (BOOL)judgeSameFileIsProcessWithFileDownUpModel:(CSFileDownUpModel *)fileDownUpModel
+{
+    BOOL hasSameFile = NO;
+    
+    NSString *searchNameAndMd5= [NSString stringWithFormat:@"%@_%@",[fileDownUpModel.downUpUUID componentsSeparatedByString:@"_"][0],[fileDownUpModel.downUpUUID componentsSeparatedByString:@"_"][1]];
+    
+    //self.name,self.md5  name_md5
+    for (NSString *allUUID in self.maxConcurrenceUploadTasks.allKeys) {
+        
+        if ([searchNameAndMd5 isEqualToString:allUUID]) {
+            
+            hasSameFile = YES;
+            break;
+        }else continue;
+        
+        
+    }
+    
+    return hasSameFile;
+}
+
+- (NSString *)getTrueFileNmae_Md5:(CSFileDownUpModel *)csFileDownUpModel
+{
+    NSString *searchNameAndMd5= [NSString stringWithFormat:@"%@_%@",csFileDownUpModel.name,csFileDownUpModel.md5];
+    return searchNameAndMd5;
+}
+
 - (void)addOneFileToUpdateWithCSFileDownUpModel:(CSFileDownUpModel *)fileDownUpModel
 {
     //判断是否重复
-    if ([self.totalUploadModels objectForKey:fileDownUpModel.downUpUUID] || [self.maxConcurrenceUploadTasks objectForKey:fileDownUpModel.downUpUUID]) {
+    if ([self.totalUploadModels objectForKey:fileDownUpModel.downUpUUID] || [self.maxConcurrenceUploadTasks objectForKey: [self getTrueFileNmae_Md5:fileDownUpModel]]) {
         return;
     }
     //无论成功还是失败还是暂停,都要对队列进行重新排序
@@ -120,9 +148,9 @@ static CloudStorageUploadCenter *cloudStorageUploadCenter;
     }
     
     _lastOneDowunUpModel = fileDownUpModel;
-
     
-    //待存储.并通知translistcontroller.
+    DownUpStatus oldStatus = fileDownUpModel.downUpStatus;
+    
     fileDownUpModel.downUpStatus = DownUpStatusWait;
     
     [self.totalUploadModels setObject:fileDownUpModel forKey:fileDownUpModel.downUpUUID];
@@ -132,33 +160,44 @@ static CloudStorageUploadCenter *cloudStorageUploadCenter;
         [self startUploadFileWithFileDownUpModel:fileDownUpModel];
     }
     
-   
-   
+    ////filemodelstatus change,save.
+    if (oldStatus != fileDownUpModel.downUpStatus) {
+        [kCloudStorageDB updateCSDownUpFileStatusWithCSFileDownUpModel:fileDownUpModel];
+    }
+    
     
 }
 
 #warning 2017-06-29 下一阶段:队列上传.
 - (void)startUploadFileWithFileDownUpModel:(CSFileDownUpModel *)fileDownUpModel
 {
+    //    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1*NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
+    
     if (!fileDownUpModel) {
         return;
     }
-
+    
     __weak typeof(self)weakSelf = self;
     //待存储.并通知translistcontroller.
     fileDownUpModel.downUpStatus = DownUpStatusDoing;
     
-    [kCloudStorageDB updateCSDownUpFileStatusWithCSFileDownUpModel:fileDownUpModel];
     //存储数据库.
-
-    CloudUploadSession *cloudUploadSession = [CloudUploadSession startUploadFileWithFileDownUpModel:fileDownUpModel operationQueue:self.taskQueue];
+    CloudUploadSession *cloudUploadSession = nil;
+    
+    if ([self judgeSameFileIsProcessWithFileDownUpModel:fileDownUpModel]) {
+        
+        cloudUploadSession = [self.maxConcurrenceUploadTasks objectForKey:[self getTrueFileNmae_Md5:fileDownUpModel]];
+        
+    }else {
+        cloudUploadSession= [CloudUploadSession startUploadFileWithFileDownUpModel:fileDownUpModel operationQueue:self.taskQueue];
+        
+        [self.maxConcurrenceUploadTasks setObject:cloudUploadSession forKey: [self getTrueFileNmae_Md5:fileDownUpModel]];
+    }
+    
     
-
-    [self.maxConcurrenceUploadTasks setObject:cloudUploadSession forKey:fileDownUpModel.downUpUUID];
-
     //云盘赋值失败怎么办.,移动至cloud..session.
     cloudUploadSession.uploadSuccessDBBlock = ^(NSString* url,long long fileSize,CSFileDownUpModel *fileDownUpModel){
-
+        
         //重新排队
         if (fileDownUpModel.lastFileDownUpModel && fileDownUpModel.nextFileDownUpModel) {
             
@@ -186,21 +225,21 @@ static CloudStorageUploadCenter *cloudStorageUploadCenter;
         if ([_lastOneDowunUpModel.downUpUUID isEqualToString:fileDownUpModel.downUpUUID]) {
             _lastOneDowunUpModel = nil;
         }
-
         
-        [weakSelf.maxConcurrenceUploadTasks removeObjectForKey:fileDownUpModel.downUpUUID];
+        
+        [weakSelf.maxConcurrenceUploadTasks removeObjectForKey:[weakSelf getTrueFileNmae_Md5:fileDownUpModel] ];
         
         [weakSelf.totalUploadModels removeObjectForKey:fileDownUpModel.downUpUUID];
         
-//        [weakSelf queueForTaskNextWithFinishedModel:weakSelf.firstOneDowunUpModel];
+        //        [weakSelf queueForTaskNextWithFinishedModel:weakSelf.firstOneDowunUpModel];
         [weakSelf queueForMuiltTastWithFinishedModel:weakSelf.firstOneDowunUpModel currentMaxTaskCount:weakSelf.maxConcurrenceUploadTasks.allValues.count];
         
-//        [CloudStorageDB updateCSDownUpFileStatusWithCSFileDownUpModel:fileDownUpModel];
-    
+        //        [CloudStorageDB updateCSDownUpFileStatusWithCSFileDownUpModel:fileDownUpModel];
+        
         
     };
     cloudUploadSession.uploadFailedDBBlock = ^(NSString* errMessage,CSFileDownUpModel *fileDownUpModel){
-    
+        
         //重新排队
         if (fileDownUpModel.lastFileDownUpModel && fileDownUpModel.nextFileDownUpModel) {
             
@@ -228,34 +267,30 @@ static CloudStorageUploadCenter *cloudStorageUploadCenter;
         if ([_lastOneDowunUpModel.downUpUUID isEqualToString:fileDownUpModel.downUpUUID]) {
             _lastOneDowunUpModel = nil;
         }
-
         
-        [weakSelf.maxConcurrenceUploadTasks removeObjectForKey:fileDownUpModel.downUpUUID];
+        [weakSelf.maxConcurrenceUploadTasks removeObjectForKey: [self getTrueFileNmae_Md5:fileDownUpModel]];
         
         [weakSelf.totalUploadModels removeObjectForKey:fileDownUpModel.downUpUUID];
-
-        [weakSelf queueForMuiltTastWithFinishedModel:weakSelf.firstOneDowunUpModel currentMaxTaskCount:weakSelf.maxConcurrenceUploadTasks.allValues.count];
-//          [weakSelf queueForTaskNextWithFinishedModel:weakSelf.firstOneDowunUpModel];
         
+        [weakSelf queueForMuiltTastWithFinishedModel:weakSelf.firstOneDowunUpModel currentMaxTaskCount:weakSelf.maxConcurrenceUploadTasks.allValues.count];
         
     };
     
     cloudUploadSession.uploadProgressDBBlock = ^(double progress,NSInteger sendedSize, CSFileDownUpModel *fileDownUpModel){
-    
-//         [CloudStorageDB updateCSDownUpFileStatusWithCSFileDownUpModel:fileDownUpModel];
+        
+        //         [CloudStorageDB updateCSDownUpFileStatusWithCSFileDownUpModel:fileDownUpModel];
     };
     
+    //通知上传下载列表进行更新.
+    if (self.fileUpStatusChangeBlock) {
+        self.fileUpStatusChangeBlock(fileDownUpModel);
+    }
+    
+    
+    //    });
+    
+    
     
-    //延迟1秒的目的: 完成task的cell更新和下一条进行更新的cell不同时进行reloaddata
-    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1*NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
-        
-        //通知上传下载列表进行更新.
-        if (self.fileUpStatusChangeBlock) {
-            self.fileUpStatusChangeBlock(fileDownUpModel);
-        }
-    });
-
-
 }
 
 //开始下一个任务
@@ -266,18 +301,18 @@ static CloudStorageUploadCenter *cloudStorageUploadCenter;
 //    if (csfileDownUpModel.downUpStatus == DownUpStatusWait && csfileDownUpModel) {
 //        [self startUploadFileWithFileDownUpModel:csfileDownUpModel];
 //    }else{
-//        
+//
 //        //递归获取nextwait
 //        [self getQueueUntileWaitTaskWithFinishedModel:csfileDownUpModel resultBlock:^(CSFileDownUpModel *nextFileDownUpModel) {
-//            
+//
 //            if (nextFileDownUpModel) {
 //                [weakSelf startUploadFileWithFileDownUpModel:nextFileDownUpModel];
 //            }
-//            
-//            
+//
+//
 //        }];
 //    }
-//    
+//
 //}
 
 - (void)queueForMuiltTastWithFinishedModel:(CSFileDownUpModel *)csfileDownUpModel currentMaxTaskCount:(NSInteger)currentMaxTaskCount
@@ -307,7 +342,7 @@ static CloudStorageUploadCenter *cloudStorageUploadCenter;
         }
         
     }
-
+    
 }
 
 //查询下一个任务
@@ -329,15 +364,14 @@ static CloudStorageUploadCenter *cloudStorageUploadCenter;
     
 }
 
-#warning 2017-06-27 下一步工作: 文件选择上传后,创建云盘路径选择器,选择存储路径,特别是对filedownupmodel的full_server_path的赋值,再进行上传.同时写入数据库.而云盘上传列表从数据库中获取模型数据.
-- (void)registeUploadForUIWithUUID:(NSString *)UUID ProcessBlock:(CSUploadProgressUIBlock)processBlock successBlock:(CSUploadSuccessUIBlock)successBlock failBlock:(CSUploadFailedUIBlock)failBlock
+- (void)registeUploadForUIWithcsFileDownUpModel:(CSFileDownUpModel *)csFileDownUpModel ProcessBlock:(CSUploadProgressUIBlock)processBlock successBlock:(CSUploadSuccessUIBlock)successBlock failBlock:(CSUploadFailedUIBlock)failBlock
 {
-    CloudUploadSession *cloudUploadSession = [self.maxConcurrenceUploadTasks objectForKey:UUID];
+    CloudUploadSession *cloudUploadSession = [self.maxConcurrenceUploadTasks objectForKey:[self getTrueFileNmae_Md5:csFileDownUpModel]];
     
     if (cloudUploadSession) {
         
-        [cloudUploadSession addBlockToUIWithUUID:UUID withProcessBlock:processBlock successBlock:successBlock failBlock:failBlock];
-
+        [cloudUploadSession addBlockToUIWithUUID:csFileDownUpModel.downUpUUID withProcessBlock:processBlock successBlock:successBlock failBlock:failBlock];
+        
     }
 }
 
@@ -345,20 +379,20 @@ static CloudStorageUploadCenter *cloudStorageUploadCenter;
 - (void)updateOneUploadStatusWithcsfileDownUpModel:(CSFileDownUpModel *)csfileDownUpModel downUpStatus:(DownUpStatus)downUpStatus
 {
     if (downUpStatus == DownUpStatusWait) {
-
+        
         [self addOneFileToUpdateWithCSFileDownUpModel:csfileDownUpModel];
     }else{
-    
+        
         //排队中的情况
         CSFileDownUpModel *oldFilDownUpModel = [self.totalUploadModels objectForKey:csfileDownUpModel.downUpUUID];
         //下载中的情况
-        CloudUploadSession *cloudUploadingSession = [self.maxConcurrenceUploadTasks objectForKey:csfileDownUpModel.downUpUUID];
+        CloudUploadSession *cloudUploadingSession = [self.maxConcurrenceUploadTasks objectForKey:[self getTrueFileNmae_Md5:csfileDownUpModel]];
         
         if (cloudUploadingSession) {
             
             [cloudUploadingSession cancerUpload];
             
-            [self.maxConcurrenceUploadTasks removeObjectForKey:csfileDownUpModel.downUpUUID];
+            [self.maxConcurrenceUploadTasks removeObjectForKey: [self getTrueFileNmae_Md5:csfileDownUpModel]];
         }
         
         if (oldFilDownUpModel)
@@ -390,23 +424,23 @@ static CloudStorageUploadCenter *cloudStorageUploadCenter;
             if ([_lastOneDowunUpModel.downUpUUID isEqualToString:oldFilDownUpModel.downUpUUID]) {
                 _lastOneDowunUpModel = nil;
             }
-
-          
+            
+            
             [self.totalUploadModels removeObjectForKey:csfileDownUpModel.downUpUUID];
             
             //开始下一个任务
             [self queueForMuiltTastWithFinishedModel:self.firstOneDowunUpModel currentMaxTaskCount:self.maxConcurrenceUploadTasks.allValues.count];
-//            [self queueForTaskNextWithFinishedModel:self.firstOneDowunUpModel];
+            //            [self queueForTaskNextWithFinishedModel:self.firstOneDowunUpModel];
             
         }
         
-
+        
     }
     
 }
 
 
-- (void)updateOneUploadStatusWithcsfileDownUpModels:(NSArray <CSFileDownUpModel *> *)csfileDownUpModels downUpStatus:(DownUpStatus)downUpStatus
+- (void)updateUploadStatusWithcsfileDownUpModels:(NSArray <CSFileDownUpModel *> *)csfileDownUpModels downUpStatus:(DownUpStatus)downUpStatus
 {
     __weak typeof(self)weakself = self;
     //1.全部暂停的,则全部移除队列并且重新排序.
@@ -427,13 +461,13 @@ static CloudStorageUploadCenter *cloudStorageUploadCenter;
             
             CSFileDownUpModel *oldFilDownUpModel = [self.totalUploadModels objectForKey:csfileDownUpModel.downUpUUID];
             
-            CloudUploadSession *cloudUploadingSession = [self.maxConcurrenceUploadTasks objectForKey:csfileDownUpModel.downUpUUID];
+            CloudUploadSession *cloudUploadingSession = [self.maxConcurrenceUploadTasks objectForKey: [self getTrueFileNmae_Md5:csfileDownUpModel]];
             
             if (cloudUploadingSession) {
                 
                 [cloudUploadingSession cancerUpload];
                 
-                [self.maxConcurrenceUploadTasks removeObjectForKey:csfileDownUpModel.downUpUUID];
+                [self.maxConcurrenceUploadTasks removeObjectForKey: [self getTrueFileNmae_Md5:csfileDownUpModel]];
             }
             
             if (oldFilDownUpModel) {
@@ -475,7 +509,13 @@ static CloudStorageUploadCenter *cloudStorageUploadCenter;
         
         
     }
-
+    
+    if (downUpStatus !=  DownUpStatusDelete) {
+        
+        [kCloudStorageDB updateCSDownUpFileStatusWithCSFileDownUpModels:csfileDownUpModels downUpType:DownUpModelDown downUpStatus:downUpStatus];
+        
+    }
+    
     
 }
 

+ 79 - 74
WSCloudStorage/CloudStorage/view/CSCloudFileDownloadView/CSFileDownUpCell.m

@@ -95,7 +95,7 @@
         speedLabel.font = FileCreateTimeFont;
         [self.contentView addSubview:speedLabel];
         self.speedLabel = speedLabel;
-       
+        
         
         UIButton *fileExtensionSwitchImageView = [[UIButton alloc]init];
         [fileExtensionSwitchImageView addTarget:self action:@selector(extensionSwithOnOff) forControlEvents:UIControlEventTouchUpInside];
@@ -130,7 +130,7 @@
         [self.contentView addSubview:fileExtensionView];
         self.fileExtensionView = fileExtensionView;
         
-      
+        
         
     }
     
@@ -148,7 +148,7 @@
         self.csFileDownUpFrameModel.csFileDownUpModel.downloadSuccessBlock = nil;
         self.csFileDownUpFrameModel.csFileDownUpModel.downloadFailedBlock = nil;
     }else{
-    
+        
         for (CSFileDownUpModel *csFileDownUpModel in self.csFileDownUpFrameModel.csFileDownUpModel.subFileDownUpModels) {
             
             csFileDownUpModel.uploadProgressBlock = nil;
@@ -184,8 +184,8 @@
     if (!self.csFileDownUpFrameModel.csFileDownUpModel.isdir) {
         
         
-       self.csFileDownUpFrameModel.csFileDownUpModel.downloadProgressBlock = ^(NSInteger receivedSize, NSInteger expectedSize, CGFloat progress, NSString *router, CSFileDownUpModel *csfileDownUpModel,NSString *uuid) {
-           
+        self.csFileDownUpFrameModel.csFileDownUpModel.downloadProgressBlock = ^(NSInteger receivedSize, NSInteger expectedSize, CGFloat progress, NSString *router, CSFileDownUpModel *csfileDownUpModel,NSString *uuid) {
+            
             if ([uuid isEqualToString:weakSelf.csFileDownUpFrameModel.csFileDownUpModel.downUpUUID]) {
                 
                 
@@ -256,9 +256,9 @@
             }
             
         };
-
+        
     }else{
-    
+        
         //文件夹
         for (CSFileDownUpModel *csFileDownUpModel in self.csFileDownUpFrameModel.csFileDownUpModel.subFileDownUpModels) {
             
@@ -276,24 +276,24 @@
                     NSDate *now = [NSDate date];
                     //
                     if (!weakSelf.lastRecordTime || [now timeIntervalSinceDate:weakSelf.lastRecordTime] >= 1) {
-        
+                        
                         weakSelf.lastRecordTime = now;
-        
+                        
                         [weakSelf getFolderSizeAndPorcessSizeWithResultBlock:^(NSInteger progressSize, NSInteger totalSize) {
-        
+                            
                             NSInteger speed = progressSize - weakSelf.lastProcessedDataLength;
-        
+                            
                             weakSelf.lastProcessedDataLength = progressSize;
-        
+                            
                             dispatch_async(dispatch_get_main_queue(), ^{
-        
+                                
                                 weakSpeedLabel.text = [NSString stringWithFormat:@"%@/s",[weakSelf bitToKb_MbWithBit:speed]];
-        
+                                
                                 weakDowunLoadControllerView.percent = progressSize*1.0f/totalSize*1.0f;
-        
+                                
                                 weakProcessSizeLabel.text = [NSString stringWithFormat:@"%@/%@",[weakSelf bitToKb_MbWithBit:progressSize],[weakSelf bitToKb_MbWithBit:totalSize]];
                             });
-        
+                            
                             
                             
                             
@@ -311,7 +311,7 @@
             csFileDownUpModel.downloadSuccessBlock = ^(NSInteger receivedSize, NSString *localFullFileRouter, CSFileDownUpModel *callBackFileDownUpModel,NSString *uuid) {
                 //operation 将完整的key传出.
                 NSArray *targetFileModelArray = [weakSelf.csFileDownUpFrameModel.csFileDownUpModel.subFileDownUpModels filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"downUpUUID = %@",uuid]];
-              
+                
                 if (targetFileModelArray.count) {
                     
                     CSFileDownUpModel *subCSFileDownUpModel = targetFileModelArray[0];
@@ -321,38 +321,38 @@
                     [weakSelf getFolderSizeAndPorcessSizeWithResultBlock:^(NSInteger progressSize, NSInteger totalSize) {
                         
                         if (progressSize == totalSize) {
-                
+                            
                             weakSelf.csFileDownUpFrameModel.csFileDownUpModel.downUpStatus = DownUpStatusSuccess;
-        
+                            
                             dispatch_async(dispatch_get_main_queue(), ^{
-        
+                                
                                 [weakSelf initData];
-        
+                                
                                 if (weakSelf.fileDownUpSuccessBlock) {
                                     weakSelf.fileDownUpSuccessBlock(weakSelf.csFileDownUpFrameModel);
                                 }
                             });
                         }
                         
-                        }];
-                    }
+                    }];
+                }
             };
             
             csFileDownUpModel.downloadFailedBlock = ^(NSString *errMessage, CSFileDownUpModel *callBackFileDownUpModel,NSString *uuid) {
                 
                 NSArray *targetFileModelArray = [weakSelf.csFileDownUpFrameModel.csFileDownUpModel.subFileDownUpModels filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"downUpUUID = %@",uuid]];
- 
+                
                 if (targetFileModelArray.count){
                     
                     CSFileDownUpModel *subCSFileDownUpModel = targetFileModelArray[0];
-             
+                    
                     //都失败的话才赋值文件夹状态为error.待新增
-                   
-                   
+                    
+                    
                 }
                 
             };
-
+            
         }
         
     }
@@ -367,15 +367,15 @@
 - (void)initUpCallBlock
 {
     __weak typeof(self)weakSelf = self;
-
+    
     __weak typeof(self.csFileDownLoadControllerView)weakDowunLoadControllerView = self.csFileDownLoadControllerView;
-
+    
     __weak typeof(self.fileProcessSizeLabel)weakProcessSizeLabel = self.fileProcessSizeLabel;
-
+    
     __weak typeof(self.fileSizeLabel)weakFileSizeLabel = self.fileSizeLabel;
-
+    
     __weak typeof(self.speedLabel)weakSpeedLabel = self.speedLabel;
-
+    
     //up
     if (!weakSelf.csFileDownUpFrameModel.csFileDownUpModel.isdir) {
         self.csFileDownUpFrameModel.csFileDownUpModel.uploadProgressBlock = ^(double progress, NSInteger sendedSize, CSFileDownUpModel *csFileDownUpModel,NSString *uuid) {
@@ -448,12 +448,12 @@
             
             
         };
-
+        
     }else{
-    
+        
         //上传文件夹暂不处理.
     }
-   
+    
 }
 
 
@@ -475,7 +475,7 @@
     [self initDownUpBlockWithDownUpModel:csFileDownUpFrameModel.csFileDownUpModel.downUpType];
     
     [self registerDownUpBlock];
-
+    
 }
 
 - (void)initData
@@ -485,7 +485,7 @@
     
     self.fileCreateTimeLabel.text = self.csFileDownUpFrameModel.strServerTime;
     
-    self.fileSizeLabel.text = [self bitToKb_MbWithBit:self.csFileDownUpFrameModel.csFileDownUpModel.size];
+    self.fileSizeLabel.text = self.csFileDownUpFrameModel.fileSizeStr;
     
     //base process/status
     if (self.csFileDownUpFrameModel.csFileDownUpModel.downUpStatus == DownUpStatusSuccess) {
@@ -508,7 +508,7 @@
         
         self.csFileDownLoadControllerView.downUpStatus = self.csFileDownUpFrameModel.csFileDownUpModel.downUpStatus;
     }
-
+    
     //header iamge
     if (self.csFileDownUpFrameModel.csFileDownUpModel.isdir) {
         
@@ -548,7 +548,7 @@
         self.lastProcessedDataLength = self.csFileDownUpFrameModel.csFileDownUpModel.downUpSize;
         self.lastRecordTime = [NSDate date];
         
-
+        
         //部分计算可以移到frammodel.
         
         if (self.csFileDownUpFrameModel.csFileDownUpModel.downUpStatus == DownUpStatusWait) {
@@ -570,13 +570,13 @@
         self.lastRecordTime = [NSDate date];
         
         self.fileSizeLabel.hidden = YES;
-      //TEXT  重新计算
+        //TEXT  重新计算
         __weak typeof(self.fileProcessSizeLabel)weakProcessSizeLabel = self.fileProcessSizeLabel;
         __weak typeof(self.csFileDownLoadControllerView)weakControllerView = self.csFileDownLoadControllerView;
         __weak typeof(self)weakself = self;
-  
+        
         [self getFolderSizeAndPorcessSizeWithResultBlock:^(NSInteger progressSize, NSInteger totalSize) {
-           
+            
             weakProcessSizeLabel.text = [NSString stringWithFormat:@"%@/%@",[self bitToKb_MbWithBit:progressSize],[self bitToKb_MbWithBit:totalSize]];
             weakControllerView.percent = progressSize * 1.0f/totalSize * 1.0f;
             weakself.lastProcessedDataLength = progressSize;
@@ -585,33 +585,33 @@
         self.speedLabel.text = nil;
         
     }
-   
-
+    
+    
 }
 
 - (void)registerDownUpBlock
 {
-  
+    
     __weak typeof(self)weakself = self;
-
+    
     if (!self.csFileDownUpFrameModel.csFileDownUpModel.isdir) {
         if (self.csFileDownUpFrameModel.csFileDownUpModel.downUpType == DownUpModelUp && self.csFileDownUpFrameModel.csFileDownUpModel.downUpStatus != DownUpStatusSuccess) {
             
-            [[CloudStorageUploadCenter sharedInstance]registeUploadForUIWithUUID:self.csFileDownUpFrameModel.csFileDownUpModel.downUpUUID ProcessBlock:self.csFileDownUpFrameModel.csFileDownUpModel.uploadProgressBlock successBlock:self.csFileDownUpFrameModel.csFileDownUpModel.uploadSuccessBlock failBlock:self.csFileDownUpFrameModel.csFileDownUpModel.uploadFailedBlock];
+            [[CloudStorageUploadCenter sharedInstance]registeUploadForUIWithcsFileDownUpModel:self.csFileDownUpFrameModel.csFileDownUpModel ProcessBlock:self.csFileDownUpFrameModel.csFileDownUpModel.uploadProgressBlock successBlock:self.csFileDownUpFrameModel.csFileDownUpModel.uploadSuccessBlock failBlock:self.csFileDownUpFrameModel.csFileDownUpModel.uploadFailedBlock];
             
             //需要initDownUpCallBlock.并且区分..down和up模式
             
         }else if(self.csFileDownUpFrameModel.csFileDownUpModel.downUpType == DownUpModelDown && self.csFileDownUpFrameModel.csFileDownUpModel.downUpStatus != DownUpStatusSuccess)
         {
-           
-            [[CloudStorageDownloadCenter sharedInstance]registeDownloadBlockForUIWithUUID:self.csFileDownUpFrameModel.csFileDownUpModel.downUpUUID ProcessBlock:self.csFileDownUpFrameModel.csFileDownUpModel.downloadProgressBlock successBlock:self.csFileDownUpFrameModel.csFileDownUpModel.downloadSuccessBlock failBlock:self.csFileDownUpFrameModel.csFileDownUpModel.downloadFailedBlock];
+            
+            [[CloudStorageDownloadCenter sharedInstance]registeDownloadBlockForUIWithcsFileDownUpModel:self.csFileDownUpFrameModel.csFileDownUpModel ProcessBlock:self.csFileDownUpFrameModel.csFileDownUpModel.downloadProgressBlock successBlock:self.csFileDownUpFrameModel.csFileDownUpModel.downloadSuccessBlock failBlock:self.csFileDownUpFrameModel.csFileDownUpModel.downloadFailedBlock];
             
         }
     }else{
-    
+        
         NSMutableArray *processModelArray = [NSMutableArray array];
         //应该获取所有子文件
- 
+        
         for (CSFileDownUpModel *downUpModel in self.csFileDownUpFrameModel.csFileDownUpModel.subFileDownUpModels) {
             if (downUpModel.downUpStatus != DownUpStatusSuccess && downUpModel.downUpSize != downUpModel.size) {
                 
@@ -622,14 +622,14 @@
         
         if (weakself.csFileDownUpFrameModel.csFileDownUpModel.downUpType == DownUpModelUp && weakself.csFileDownUpFrameModel.csFileDownUpModel.downUpStatus != DownUpStatusSuccess) {
             
-          if (processModelArray.count)
-          {
-              for (CSFileDownUpModel *downUpModel in processModelArray) {
-                  
-                  [[CloudStorageUploadCenter sharedInstance]registeUploadForUIWithUUID:downUpModel.downUpUUID ProcessBlock:downUpModel.uploadProgressBlock successBlock:downUpModel.uploadSuccessBlock failBlock:downUpModel.uploadFailedBlock];
-                  
-              }
-          }
+            if (processModelArray.count)
+            {
+                for (CSFileDownUpModel *downUpModel in processModelArray) {
+                    
+                    [[CloudStorageUploadCenter sharedInstance]registeUploadForUIWithcsFileDownUpModel:downUpModel ProcessBlock:downUpModel.uploadProgressBlock successBlock:downUpModel.uploadSuccessBlock failBlock:downUpModel.uploadFailedBlock];
+                    
+                }
+            }
             
             
             //需要initDownUpCallBlock.并且区分..down和up模式
@@ -638,17 +638,17 @@
         {
             
             if (processModelArray.count){
-            
+                
                 for (CSFileDownUpModel *downUpModel in processModelArray) {
                     
-                    [[CloudStorageDownloadCenter sharedInstance]registeDownloadBlockForUIWithUUID:downUpModel.downUpUUID ProcessBlock:downUpModel.downloadProgressBlock successBlock:downUpModel.downloadSuccessBlock failBlock:downUpModel.downloadFailedBlock];
-
+                    [[CloudStorageDownloadCenter sharedInstance]registeDownloadBlockForUIWithcsFileDownUpModel:downUpModel ProcessBlock:downUpModel.downloadProgressBlock successBlock:downUpModel.downloadSuccessBlock failBlock:downUpModel.downloadFailedBlock];
+                    
                 }
                 
             }
             
         }
-
+        
     }
     
     
@@ -659,7 +659,7 @@
 - (void)getFolderSizeAndPorcessSizeWithResultBlock:(void(^)(NSInteger progressSize, NSInteger totalSize))resultBlock
 {
     
-
+    
     NSInteger totalSize = 0;
     NSInteger progressSize = 0;
     for (CSFileDownUpModel *downUpModel in self.csFileDownUpFrameModel.csFileDownUpModel.subFileDownUpModels) {
@@ -672,8 +672,8 @@
     if (resultBlock) {
         resultBlock(progressSize,totalSize);
     }
-        
-  
+    
+    
 }
 
 - (NSString *)bitToKb_MbWithBit:(NSInteger)bit
@@ -682,19 +682,24 @@
     double downLoadedSize = bit * 1.00f/1024 * 1.00f;
     NSString *downloadSizeStr = nil;
     
-    if (downLoadedSize>1024) {
+    if (downLoadedSize>1024 * 1024) {
+        CGFloat dSize = downLoadedSize / (1024 * 1024 * 1.0f);
+        
+        downloadSizeStr = [NSString stringWithFormat:@"%.2lf Gb",floor(dSize*100) / 100 ];
+        
+    }else if (downLoadedSize>1024) {
         CGFloat dSize = downLoadedSize / 1024 * 1.0f;
         
-        downloadSizeStr = [NSString stringWithFormat:@"%.2lfM",floor(dSize*100) / 100 ];
+        downloadSizeStr = [NSString stringWithFormat:@"%.2lf Mb",floor(dSize*100) / 100 ];
         
     }else
     {
-        downloadSizeStr = [NSString stringWithFormat:@"%.2lfkb",floor(downLoadedSize*100) / 100];
+        downloadSizeStr = [NSString stringWithFormat:@"%.2lf Kb",floor(downLoadedSize*100) / 100];
         
     }
     
     return downloadSizeStr;
-
+    
 }
 
 - (void)layoutSubviews
@@ -715,7 +720,7 @@
     
     _fileSizeLabel.frame = self.csFileDownUpFrameModel.fileSizeLabelFrame;
     
-    _speedLabel.frame = _fileSizeLabel.frame;
+    _speedLabel.frame = self.csFileDownUpFrameModel.fileDownUpSpeedLabelFrame;
     
     //animation?
     __weak typeof(self)weakself = self;
@@ -737,7 +742,7 @@
         self.csFileDownUpFrameModel.csFileDownUpModel.downloadProgressBlock = nil;
         self.csFileDownUpFrameModel.csFileDownUpModel.downloadSuccessBlock = nil;
         self.csFileDownUpFrameModel.csFileDownUpModel.downloadFailedBlock = nil;
-                
+        
     }else{
         
         for (CSFileDownUpModel *csFileDownUpModel in self.csFileDownUpFrameModel.csFileDownUpModel.subFileDownUpModels) {
@@ -752,7 +757,7 @@
         }
         
     }
-
+    
 }
 
 

+ 6 - 2
WSCloudStorage/DBManager/DBOperation.h

@@ -15,11 +15,15 @@
 + (instancetype)dbOperationWithPath:(NSString *)path;
 
 //- (void)creatDBbySQL:(NSString *)sql Path:(NSString *)path;
-- (void)creatDBWithTableName:(NSString *)tableName dbModelClass:(Class)dbModelClass Path:(NSString *)path autoUpgrade:(BOOL)autoUpgrade;
+- (void)creatDBWithTableName:(NSString *)tableName dbModelClass:(Class)dbModelClass Path:(NSString *)path autoUpgrade:(BOOL)autoUpgrade uniqueCloumName:(NSString *)uniqueCloumName;
 //插入模型
-- (void)addDataToDBbySQL:(NSString *)sql statuDBmodel:(id )model;
+- (void)addDataDBWithTableName:(NSString *)tableName model:(id)model;
+- (void)addDatasDBWithTableName:(NSString *)tableName models:(NSArray *)models;
 
 - (void)addDataToDBWithSQL:(NSString *)sql;
+
+//事务批量插入
+- (void)addDatasToDBWithSQLs:(NSArray *)sqls;
 //查询
 - (void)quaryDBbySQL:(NSString *)sql result:(void(^)(NSMutableArray *array))result;
 @end

+ 138 - 23
WSCloudStorage/DBManager/DBOperation.m

@@ -31,27 +31,27 @@
 
 - (void)creatDBbySQL:(NSString *)sql Path:(NSString *)path
 {
-
+    
     [self.dbqueue inDatabase:^(FMDatabase *db) {
         [db executeUpdate:sql];
         
     }];
     
-
-
+    
+    
     //dbqueue = [FMDatabaseQueue databaseQueueWithPath:path];
-//    if (dbqueue == nil) {
-//        dbqueue = [FMDatabaseQueue databaseQueueWithPath:path];
-//    }
-//    
-//    [dbqueue inDatabase:^(FMDatabase *db) {
-//        [db executeUpdate:sql];
-//        
-//    }];
+    //    if (dbqueue == nil) {
+    //        dbqueue = [FMDatabaseQueue databaseQueueWithPath:path];
+    //    }
+    //
+    //    [dbqueue inDatabase:^(FMDatabase *db) {
+    //        [db executeUpdate:sql];
+    //
+    //    }];
     
 }
 
-- (void)creatDBWithTableName:(NSString *)tableName dbModelClass:(Class)dbModelClass Path:(NSString *)path autoUpgrade:(BOOL)autoUpgrade
+- (void)creatDBWithTableName:(NSString *)tableName dbModelClass:(Class)dbModelClass Path:(NSString *)path autoUpgrade:(BOOL)autoUpgrade uniqueCloumName:(NSString *)uniqueCloumName
 {
     NSString *sql = [DBConfigureCenter getDBTableWithTableName:tableName className:dbModelClass];
     
@@ -60,7 +60,13 @@
     //自动升级.
     if (autoUpgrade) {
         
-          [self judgeCloumExistAndAutoUpdateWithTableName:tableName allCloumnName_TypeArray:[DBConfigureCenter sqlCloumnCheckWithClassName:dbModelClass]];
+        [self judgeCloumExistAndAutoUpdateWithTableName:tableName allCloumnName_TypeArray:[DBConfigureCenter sqlCloumnCheckWithClassName:dbModelClass]];
+    }
+    
+    if (uniqueCloumName.length) {
+        NSString *indexSql = [NSString stringWithFormat:@"create unique index %@_index_%@ on %@(%@)",tableName,uniqueCloumName,tableName,uniqueCloumName];
+        
+        [self addDataToDBWithSQL:indexSql];
     }
 }
 
@@ -109,10 +115,10 @@
         
         while (rs.next) {
             //获取nsdata
-//            NSData *data = rs.resultDictionary ;//[rs dataForColumn:nil];
-//            //将nsdata转成weibostatusmodel
-//            GroupObject *groupObject = [NSKeyedUnarchiver unarchiveObjectWithData:data];
-//            [tempArray addObject:groupObject];
+            //            NSData *data = rs.resultDictionary ;//[rs dataForColumn:nil];
+            //            //将nsdata转成weibostatusmodel
+            //            GroupObject *groupObject = [NSKeyedUnarchiver unarchiveObjectWithData:data];
+            //            [tempArray addObject:groupObject];
             NSDictionary *dict = rs.resultDictionary;
             [tempArray addObject:dict];
             
@@ -126,13 +132,22 @@
 }
 
 //插入模型
-- (void)addDataToDBbySQL:(NSString *)sql statuDBmodel:(id )model
+- (void)addDataDBWithTableName:(NSString *)tableName model:(id)model
 {
-    //遍历model...
-//    [dbqueue inDatabase:^(FMDatabase *db) {
-//        [db executeUpdate:sql, dbmodel.access_token,dbmodel.idstr
-//         ,dbmodel.data];
-//    }];
+    NSString *sql = [self getInsertModelSqlWithTableName:tableName model:model];
+    [self addDataToDBWithSQL:sql];
+}
+
+- (void)addDatasDBWithTableName:(NSString *)tableName models:(NSArray *)models
+{
+    NSMutableArray *tempSqlsArray = [NSMutableArray array];
+    
+    for (id model in models) {
+        [tempSqlsArray addObject:[self getInsertModelSqlWithTableName:tableName model:model]];
+    }
+    
+    [self addDatasToDBWithSQLs:tempSqlsArray];
+    
 }
 
 - (void)addDataToDBWithSQL:(NSString *)sql
@@ -141,4 +156,104 @@
         [db executeUpdate:sql];
     }];
 }
+
+- (void)addDatasToDBWithSQLs:(NSArray *)sqls
+{
+    [self.dbqueue inDatabase:^(FMDatabase *db) {
+        
+#ifdef DEBUG
+        db.logsErrors = YES;
+#else
+        db.logsErrors = NO;
+#endif
+        
+        NSLog(@"start1111111111");
+        
+        
+        [db beginTransaction];
+        @try {
+            for (NSString *sql in sqls) {
+                [db executeUpdate:sql];
+            }
+            
+            
+        }
+        @catch (NSException *exception)
+        {
+            [db rollback];
+        }
+        @finally
+        {
+            [db commit];
+        }
+        
+        
+        NSLog(@"end1111111111");
+        
+    }];
+}
+
+- (NSString *)getInsertModelSqlWithTableName:(NSString *)tableName model:(id)model
+{
+    Class cls = [model class];
+    
+    unsigned int ivarsCnt = 0;
+    // 获取类成员变量列表,ivarsCnt为类成员数量
+    Ivar *ivars = class_copyIvarList(cls, &ivarsCnt);
+    
+    // 遍历成员变量列表,其中每个变量都是Ivar类型的结构体
+    int i = 0;
+    NSMutableArray *keys = [NSMutableArray array];
+    NSMutableArray *values = [NSMutableArray array];
+    //    NSMutableArray *valueSqlSymbol = [NSMutableArray array];
+    for (const Ivar *p = ivars; p < ivars + ivarsCnt; ++p)
+    {
+        
+        Ivar const ivar = *p;
+        
+        // 获取变量名
+        NSString *key = [NSString stringWithUTF8String:ivar_getName(ivar)];
+        // 若此变量未在类结构体中声明而只声明为Property,则变量名加前缀 '_'下划线
+        // 比如 @property(retain) NSString *abc;则 key == _abc;
+        
+        // 获取变量值
+        id value = [model valueForKey:key];
+        //        id value = [self valueForKey:key];
+        
+        // 取得变量类型
+        // 通过 type[0]可以判断其具体的内置类型
+        //        const char *type = ivar_getTypeEncoding(ivar);
+        
+        if(value)
+        {
+            BOOL strValue = NO;
+            if ([value isKindOfClass:[NSString class]]) {
+                strValue = YES;
+                NSString *strValue = value;
+                if (!strValue.length) {
+                    continue;
+                }
+            }
+            
+            [keys addObject:[key substringFromIndex:1]];
+            
+            //字符串需要新增一个'',如果是字典对象呢?
+            if (strValue) {
+                [values addObject:[NSString stringWithFormat:@"'%@'",value]];
+            }else [values addObject:value];
+            
+            //            [valueSqlSymbol addObject:@"?"];
+        }
+        
+        i++;
+    }
+    
+    free(ivars);
+    
+    NSString *fileKeyListStr = [keys componentsJoinedByString:@","];
+    NSString *fileValueListStr = [values componentsJoinedByString:@","];
+    
+    NSString *SQL = [NSString stringWithFormat:@"insert into %@ (%@) values(%@)",tableName,fileKeyListStr,fileValueListStr];
+    return SQL;
+}
 @end