CSFileTransListController.m 30 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833
  1. //
  2. // FileTransListController.m
  3. // zhuxun
  4. //
  5. // Created by winsoft on 17/6/22.
  6. //
  7. //
  8. #import "CSFileTransListController.h"
  9. #import "IWNavigationController.h"
  10. //#import "NewMessageTransController.h"
  11. #import "CSFileDownUpCell.h"
  12. #import "CloudStorageDB.h"
  13. #import "CloudStorageUploadCenter.h"
  14. #import "CloudStorageDownloadCenter.h"
  15. #import "FileUtils.h"
  16. #import "UIBarButtonItem+Addition.h"
  17. #define KSegmentH 40
  18. @interface CSFileTransListController()<UITableViewDelegate, UITableViewDataSource>
  19. @property (nonatomic , weak) UISegmentedControl *segmentControl;
  20. @property (nonatomic , weak) UITableView *mainTableView;
  21. @property (nonatomic , weak) CSFileExtensionViewForCell *extensionView;
  22. @property (nonatomic , copy) NSString *pid;
  23. @property (nonatomic , assign) DownUpModel downUpModel;
  24. @property (nonatomic , strong) NSMutableArray *processDataArray;
  25. @property (nonatomic , strong) NSMutableArray *finishDataArray;
  26. @property (nonatomic , strong) NSMutableArray *uploadProcessDataArray;
  27. @property (nonatomic , strong) NSMutableArray *uploadFinishDataArray;
  28. @property (nonatomic , strong) NSMutableArray *downloadProcessDataArray;
  29. @property (nonatomic , strong) NSMutableArray *downloadFinishDataArray;
  30. @property (nonatomic , strong) NSMutableArray *muiltSelectFilesArray;
  31. @end
  32. @implementation CSFileTransListController
  33. - (NSMutableArray *)processDataArray
  34. {
  35. if (self.downUpModel == DownUpModelUp) {
  36. return self.uploadProcessDataArray;
  37. }else return self.downloadProcessDataArray;
  38. }
  39. - (NSMutableArray *)finishDataArray
  40. {
  41. if (self.downUpModel == DownUpModelDown) {
  42. return self.downloadFinishDataArray;
  43. }else return self.uploadFinishDataArray;
  44. }
  45. - (NSMutableArray *)uploadProcessDataArray
  46. {
  47. if (!_uploadProcessDataArray) {
  48. _uploadProcessDataArray = [NSMutableArray array];
  49. }
  50. return _uploadProcessDataArray;
  51. }
  52. - (NSMutableArray *)uploadFinishDataArray
  53. {
  54. if (!_uploadFinishDataArray) {
  55. _uploadFinishDataArray = [NSMutableArray array];
  56. }
  57. return _uploadFinishDataArray;
  58. }
  59. - (NSMutableArray *)downloadProcessDataArray
  60. {
  61. if (!_downloadProcessDataArray) {
  62. _downloadProcessDataArray = [NSMutableArray array];
  63. }
  64. return _downloadProcessDataArray;
  65. }
  66. - (NSMutableArray *)downloadFinishDataArray
  67. {
  68. if (!_downloadFinishDataArray) {
  69. _downloadFinishDataArray = [NSMutableArray array];
  70. }
  71. return _downloadFinishDataArray;
  72. }
  73. - (NSMutableArray *)muiltSelectFilesArray
  74. {
  75. if (!_muiltSelectFilesArray) {
  76. _muiltSelectFilesArray = [NSMutableArray array];
  77. }
  78. return _muiltSelectFilesArray;
  79. }
  80. - (void)viewDidLoad
  81. {
  82. [super viewDidLoad];
  83. if([self respondsToSelector:@selector(setEdgesForExtendedLayout:)])
  84. {
  85. self.edgesForExtendedLayout = UIRectEdgeNone;
  86. }
  87. if (!self.pid) {
  88. self.pid = @"0";
  89. }
  90. if ([self.pid isEqualToString:@"0"]) {
  91. self.title = @"传输列表";
  92. }
  93. self.navigationItem.rightBarButtonItem = [UIBarButtonItem itemWithTarget:self action:@selector(muiltSelect) icon:@"navbar_muiltSel" highlightedIcon:@"navbar_muiltSel_press" title:nil iconSize:CGSizeMake(20, 20) fontSize:0 titleColor:nil];
  94. [self initSubviews];
  95. [self registeUploadCenter];
  96. }
  97. - (void)viewWillAppear:(BOOL)animated
  98. {
  99. [super viewWillAppear:animated];
  100. [self registeUploadCenter];
  101. [self registeDownloadCenter];
  102. [self initData];
  103. }
  104. - (void)muiltSelect
  105. {
  106. [self.muiltSelectFilesArray removeAllObjects];
  107. self.mainTableView.allowsMultipleSelection = !self.mainTableView.allowsMultipleSelection;
  108. [self.mainTableView reloadData];
  109. __weak typeof(self)weakself = self;
  110. __weak typeof(self.mainTableView)weakTableView = self.mainTableView;
  111. if (self.mainTableView.allowsMultipleSelection) {
  112. CSFileExtensionViewForCell *extensionView = [[CSFileExtensionViewForCell alloc]initWithItmes:@[@{@"icon":@"file_share_normal",@"title":@"分享",@"opType":@(ExtensionOPShare)},@{@"icon":@"file_delete_normal",@"title":@"删除",@"opType":@(ExtensionOPDelete)}]];
  113. extensionView.extensionOpBlock = ^(ExtensionOP extensionOP, CSFileDownUpFrameModel *csFileDownUpFrameModel){
  114. switch (extensionOP) {
  115. case ExtensionOPDelete:
  116. [weakself deleteFiles:self.muiltSelectFilesArray];
  117. break;
  118. case ExtensionOPShare:
  119. //yidong 文件夹;
  120. [weakself shareFiles:self.muiltSelectFilesArray];
  121. break;
  122. default:
  123. break;
  124. }
  125. };
  126. extensionView.disable = YES;
  127. extensionView.frame = CGRectMake(0, self.view.frame.size.height - FileExtensionViewH, SCREEN_WIDTH, FileExtensionViewH);
  128. [self.view addSubview:extensionView];
  129. self.extensionView = extensionView;
  130. self.segmentControl.enabled = NO;
  131. }else{
  132. [self.extensionView removeFromSuperview];
  133. self.extensionView = nil;
  134. self.segmentControl.enabled = YES;
  135. }
  136. //调整tableview.frame
  137. self.mainTableView.frame = CGRectMake(0, CGRectGetMaxY(self.segmentControl.frame), SCREEN_WIDTH, SCREEN_HEIGHT - self.segmentControl.frame.size.height - NavBarHeight - STATUSBAR_HEIGHT -(self.hidesBottomBarWhenPushed?0:self.tabBarController.tabBar.frame.size.height) -(self.extensionView?self.extensionView.frame.size.height:0));
  138. }
  139. - (void)initSubviews{
  140. NSArray *segtitiles = segtitiles = @[@"下载列表",@"上传列表"];
  141. UISegmentedControl *segmentControl = [[UISegmentedControl alloc]initWithItems:segtitiles];
  142. segmentControl.apportionsSegmentWidthsByContent = NO;
  143. segmentControl.tintColor = [UIColor clearColor];//去掉颜色,现在整个segment都看不见
  144. segmentControl.backgroundColor = [UIColor colorWithRed:0.969 green:0.969 blue:0.961 alpha:1.000];
  145. NSDictionary* selectedTextAttributes = @{NSFontAttributeName:[UIFont boldSystemFontOfSize:14],
  146. NSForegroundColorAttributeName: [UIColor colorWithRed:0.000 green:0.475 blue:1.000 alpha:1.000]};
  147. [segmentControl setTitleTextAttributes:selectedTextAttributes forState:UIControlStateSelected];//设置文字属性
  148. NSDictionary* unselectedTextAttributes = @{NSFontAttributeName:[UIFont boldSystemFontOfSize:14],
  149. NSForegroundColorAttributeName: [UIColor colorWithWhite:0.510 alpha:1.000]};
  150. [segmentControl setTitleTextAttributes:unselectedTextAttributes forState:UIControlStateNormal];
  151. segmentControl.segmentedControlStyle = UISegmentedControlStyleBar;
  152. [segmentControl addTarget:self action:@selector(segmentaction:) forControlEvents:UIControlEventValueChanged];
  153. //[self.segmentControl addTarget:self action:@selector(segmentaction:) forControlEvents:UIControlEventValueChanged];
  154. segmentControl.selectedSegmentIndex = 0;
  155. if ([self.pid isEqualToString:@"0"]) {
  156. segmentControl.frame = CGRectMake(0, 0, self.view.frame.size.width, KSegmentH);
  157. }else segmentControl.frame = CGRectZero;
  158. [self.view addSubview:segmentControl];
  159. self.segmentControl = segmentControl;
  160. UITableView *mainTableView = [[UITableView alloc]initWithFrame:CGRectMake(0, CGRectGetMaxY(segmentControl.frame), self.view.frame.size.width, SCREEN_HEIGHT - segmentControl.frame.size.height - NavBarHeight - STATUSBAR_HEIGHT - (![self.pid isEqualToString:@"0"]?0:self.tabBarController.tabBar.frame.size.height)) style:UITableViewStylePlain];
  161. mainTableView.separatorStyle = UITableViewCellSeparatorStyleNone;
  162. mainTableView.delegate = self;
  163. mainTableView.dataSource = self;
  164. mainTableView.tableFooterView = [[UIView alloc]init];
  165. mainTableView.tableFooterView.backgroundColor = [UIColor clearColor];
  166. [self.view addSubview:mainTableView];
  167. self.mainTableView = mainTableView;
  168. }
  169. #warning 2017-06-30 获取doing和waiting的数据,加入center进行任务, pause的手动处理.
  170. - (void)initData
  171. {
  172. [self.downloadProcessDataArray removeAllObjects];
  173. [self.downloadFinishDataArray removeAllObjects];
  174. [self.uploadProcessDataArray removeAllObjects];
  175. [self.uploadFinishDataArray removeAllObjects];
  176. __weak typeof(self)weakSelf = self;
  177. __weak typeof(self.mainTableView)weakTableView = self.mainTableView;
  178. //新增文件夹下载
  179. IWNavigationController *iwNav = (IWNavigationController *)self.navigationController;
  180. iwNav.cloudControlerDBBlock = ^(id dbModel){
  181. //同一个pid则.
  182. CSFileDownUpModel *fileDownUpModel = dbModel;
  183. if ([fileDownUpModel.pid isEqualToString:weakSelf.pid] ) {
  184. [weakSelf initData];
  185. }
  186. };
  187. [kCloudStorageDB getSubFileFolderUpSuccessFileWithPid:self.pid ResultBlock:^(NSArray *result) {
  188. for (CSFileDownUpModel *csFileDownUpModel in result) {
  189. CSFileDownUpFrameModel *frameModel = [[CSFileDownUpFrameModel alloc]initWithCSFileDownUpModel:csFileDownUpModel];
  190. [weakSelf.uploadFinishDataArray addObject:frameModel];
  191. }
  192. [weakTableView reloadData];
  193. }];
  194. #warning list根据cagegory =0 及 pid来.首次如果pid不存在, 则使用cagegory =0 , 然后点击后,pid赋值..
  195. [kCloudStorageDB getSubFileFolderUpUnFinishedFileWithPid:self.pid ResultBlock:^(NSArray *result) {
  196. for (CSFileDownUpModel *csFileDownUpModel in result) {
  197. CSFileDownUpFrameModel *frameModel = [[CSFileDownUpFrameModel alloc]initWithCSFileDownUpModel:csFileDownUpModel];
  198. [weakSelf.uploadProcessDataArray addObject:frameModel];
  199. }
  200. [weakTableView reloadData];
  201. }];
  202. //下载成功的条件: 符合条件pid的文件,以及文件夹且子文件都成功.
  203. [kCloudStorageDB getSubFileFolderDownSuccessFileWithPid:self.pid ResultBlock:^(NSArray *result) {
  204. for (CSFileDownUpModel *csFileDownUpModel in result) {
  205. CSFileDownUpFrameModel *frameModel = [[CSFileDownUpFrameModel alloc]initWithCSFileDownUpModel:csFileDownUpModel];
  206. [weakSelf.downloadFinishDataArray addObject:frameModel];
  207. }
  208. [weakTableView reloadData];
  209. }];
  210. //文件夹单独放出来进行判断.
  211. [kCloudStorageDB getSubFileFolderDownUnFinishedFileWithPid:self.pid ResultBlock:^(NSArray *result) {
  212. for (CSFileDownUpModel *csFileDownUpModel in result) {
  213. CSFileDownUpFrameModel *frameModel = [[CSFileDownUpFrameModel alloc]initWithCSFileDownUpModel:csFileDownUpModel];
  214. [weakSelf.downloadProcessDataArray addObject:frameModel];
  215. }
  216. [weakTableView reloadData];
  217. }];
  218. }
  219. //间隔一秒种.防止和上一个成功的ui刷新冲突
  220. - (void)registeUploadCenter
  221. {
  222. __weak typeof(self)weakself = self;
  223. __weak typeof(self.mainTableView)weakTableView = self.mainTableView;
  224. //上传暂不考虑文件夹
  225. [CloudStorageUploadCenter sharedInstance].fileUpStatusChangeBlock = ^(CSFileDownUpModel *csFileDownUpModel){
  226. NSPredicate *predicate = [NSPredicate predicateWithFormat:@"csFileDownUpModel.downUpUUID = %@", csFileDownUpModel.downUpUUID]; //过滤条件
  227. // NSMutableArray *tempArray = [NSMutableArray array];
  228. NSArray *filteredArray= [weakself.uploadProcessDataArray filteredArrayUsingPredicate:predicate]; //最终结果filteredArray
  229. if (filteredArray.count) {
  230. CSFileDownUpFrameModel *uploadingFrameModel = filteredArray[0];
  231. uploadingFrameModel.csFileDownUpModel.downUpStatus = csFileDownUpModel.downUpStatus;
  232. if (weakself.downUpModel == DownUpModelUp) {
  233. NSInteger index = [weakself.uploadProcessDataArray indexOfObject:uploadingFrameModel];
  234. dispatch_async(dispatch_get_main_queue(), ^{
  235. [weakTableView reloadRowsAtIndexPaths:@[[NSIndexPath indexPathForRow:index inSection:0]] withRowAnimation:UITableViewRowAnimationNone];
  236. });
  237. }
  238. }else{
  239. //是否可能不存在需要新增的情况>?
  240. }
  241. };
  242. //cell register ui process block.
  243. }
  244. - (void)registeDownloadCenter
  245. {
  246. //先判断文件是否存在,没有,则判断上层(递归)文件夹是否存在.,或则反过来,判断所有的文件夹是否包含通知过来的文件,有则开始更新该文件夹cell.,同文件不同位置的情况?不管ifelase,都判断?,先文件,再文件夹.
  247. __weak typeof(self)weakself = self;
  248. __weak typeof(self.mainTableView)weakTableView = self.mainTableView;
  249. //文件开始下载的通知
  250. [CloudStorageDownloadCenter sharedInstance].fileDownStatusChangeBlock = ^(CSFileDownUpModel *fileDownUpModel){
  251. NSPredicate *predicate = [NSPredicate predicateWithFormat:@"csFileDownUpModel.downUpUUID = %@", fileDownUpModel.downUpUUID]; //过滤条件
  252. NSArray *filteredArray= [weakself.downloadProcessDataArray filteredArrayUsingPredicate:predicate]; //最终结果filteredArray
  253. if (filteredArray.count) {
  254. CSFileDownUpFrameModel *downloaddingFrameModel = filteredArray[0];
  255. downloaddingFrameModel.csFileDownUpModel.downUpStatus = fileDownUpModel.downUpStatus;
  256. if (weakself.downUpModel == DownUpModelDown) {
  257. NSInteger index = [weakself.downloadProcessDataArray indexOfObject:downloaddingFrameModel];
  258. dispatch_async(dispatch_get_main_queue(), ^{
  259. [weakTableView reloadRowsAtIndexPaths:@[[NSIndexPath indexPathForRow:index inSection:0]] withRowAnimation:UITableViewRowAnimationNone];
  260. });
  261. }
  262. } else if(!filteredArray.count){
  263. #warning 2017-07-20 同一文件不同位置的.情况是否已考虑?
  264. // //开始文件夹判断.
  265. // //获取当前所有文件夹
  266. NSPredicate *predicate = [NSPredicate predicateWithFormat:@"csFileDownUpModel.isdir = 1"]; //过滤条件
  267. NSArray *filteredArray= [weakself.downloadProcessDataArray filteredArrayUsingPredicate:predicate]; //最终结果filteredArray
  268. for (CSFileDownUpFrameModel *downloaddingFolderFrameModel in filteredArray) {
  269. //md5,name.
  270. //判断是否有同文件.
  271. NSPredicate *subPredicate = [NSPredicate predicateWithFormat:@"md5 = %@ AND name = %@",fileDownUpModel.md5,fileDownUpModel.name]; //过滤条件
  272. NSArray *subfilteredArray= [downloaddingFolderFrameModel.csFileDownUpModel.subFileDownUpModels filteredArrayUsingPredicate:subPredicate]; //最终结果filteredArray
  273. if (subfilteredArray.count) {
  274. //刷新当前文件夹.
  275. downloaddingFolderFrameModel.csFileDownUpModel.downUpStatus = fileDownUpModel.downUpStatus;
  276. if (weakself.downUpModel == DownUpModelDown) {
  277. // NSInteger index = [weakself.downloadProcessDataArray indexOfObject:downloaddingFolderFrameModel];
  278. dispatch_async(dispatch_get_main_queue(), ^{
  279. [weakTableView reloadData];
  280. //[weakTableView reloadRowsAtIndexPaths:@[[NSIndexPath indexPathForRow:index inSection:0]] withRowAnimation:UITableViewRowAnimationNone];
  281. });
  282. }
  283. }
  284. }
  285. }
  286. };
  287. }
  288. - (void)segmentaction:(UISegmentedControl *)setmentController
  289. {
  290. self.downUpModel = (DownUpModel)setmentController.selectedSegmentIndex;
  291. [self.mainTableView reloadData];
  292. }
  293. #pragma mark --
  294. #pragma mark -- tableviewDatasource
  295. - (CSFileDownUpFrameModel *)getTargetDataArrayWithIndexPath:(NSIndexPath *)indexPath
  296. {
  297. NSMutableArray *dataArray = nil;
  298. if (indexPath.section == 0) {
  299. dataArray = self.processDataArray;
  300. }else if(indexPath.section == 1)
  301. {
  302. dataArray = self.finishDataArray;
  303. }
  304. CSFileDownUpFrameModel *frameModel = dataArray[indexPath.row];
  305. return frameModel;
  306. }
  307. - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
  308. {
  309. return 2;
  310. }
  311. - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
  312. {
  313. if (section == 0) {
  314. return self.processDataArray.count;
  315. }else if(section == 1)
  316. {
  317. return self.finishDataArray.count;
  318. }
  319. return 0;
  320. }
  321. - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
  322. {
  323. CSFileDownUpFrameModel *frameModel = [self getTargetDataArrayWithIndexPath:indexPath];
  324. CSFileDownUpCell *csFileDownUpCell = [CSFileDownUpCell fileDownUpCellWithCSFileDownUpFrameModel:frameModel tableView:tableView indexPath:indexPath identifier:CSFileDownUpCellIdentifier opItems:@[@{@"icon":@"file_share_normal",@"title":@"分享",@"opType":@(ExtensionOPShare)},@{@"icon":@"file_delete_normal",@"title":@"删除",@"opType":@(ExtensionOPDelete)}]];
  325. csFileDownUpCell.allowsMultipleSelection = tableView.allowsMultipleSelection;
  326. csFileDownUpCell.csFileDownUpFrameModel = frameModel;
  327. csFileDownUpCell.indexPath = indexPath;
  328. __weak typeof(self.mainTableView)weakTableView = self.mainTableView;
  329. __weak typeof(self)weakself = self;
  330. csFileDownUpCell.extensionSwitchBlock = ^(CSFileDownUpFrameModel *csFileDownUpFrameModel){
  331. NSInteger index = [weakself.finishDataArray indexOfObject:csFileDownUpFrameModel];
  332. NSIndexPath *indexPath = [NSIndexPath indexPathForRow:index inSection:1];
  333. csFileDownUpFrameModel.isFileExtensionOP = !csFileDownUpFrameModel.isFileExtensionOP;
  334. [weakTableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationNone];
  335. [weakTableView scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionNone animated:YES];
  336. };
  337. csFileDownUpCell.downUpStatusBlock = ^(CSFileDownUpFrameModel *csFileDownUpFrameModel, DownUpStatus downUpStatus){
  338. csFileDownUpFrameModel.csFileDownUpModel.downUpStatus = downUpStatus;
  339. //db save
  340. [kCloudStorageDB updateCSDownUpFileStatusWithCSFileDownUpModel:csFileDownUpFrameModel.csFileDownUpModel];
  341. //center notice.
  342. if (!csFileDownUpFrameModel.csFileDownUpModel.isdir) {
  343. if (csFileDownUpFrameModel.csFileDownUpModel.downUpType == DownUpModelUp) {
  344. //
  345. [[CloudStorageUploadCenter sharedInstance]updateOneUploadStatusWithcsfileDownUpModel:csFileDownUpFrameModel.csFileDownUpModel downUpStatus:downUpStatus];
  346. }else if (csFileDownUpFrameModel.csFileDownUpModel.downUpType == DownUpModelDown)
  347. {
  348. [[CloudStorageDownloadCenter sharedInstance]updateOneDownloadStatusWithcsfileDownUpModel:csFileDownUpFrameModel.csFileDownUpModel downUpStatus:downUpStatus];
  349. }
  350. }else{
  351. //获取所有文件及文件夹
  352. [kCloudStorageDB getAllCSDownUpFilesFoldersWithPid:csFileDownUpFrameModel.csFileDownUpModel.sid isdir:2 downUpModel:csFileDownUpFrameModel.csFileDownUpModel.downUpType resultBlock:^(NSArray *downUpModels) {
  353. NSMutableArray *tempArray = [NSMutableArray array];
  354. for (CSFileDownUpModel *csFileDownUpModel in downUpModels) {
  355. if (csFileDownUpFrameModel.csFileDownUpModel.downUpType == DownUpModelDown && csFileDownUpModel.downUpStatus != DownUpStatusSuccess) {
  356. csFileDownUpModel.downUpStatus = csFileDownUpFrameModel.csFileDownUpModel.downUpStatus;
  357. [kCloudStorageDB updateCSDownUpFileStatusWithCSFileDownUpModel:csFileDownUpModel];
  358. //需要先判断是否有同文件在进行,如果有,移除文件夹的callblock.
  359. if (!csFileDownUpModel.isdir) {
  360. [tempArray addObject:csFileDownUpModel];
  361. // [[CloudStorageDownloadCenter sharedInstance]updateOneDownloadStatusWithcsfileDownUpModel:csFileDownUpModel];
  362. }
  363. //内层所有文件夹暂停下载,则外层文件夹也需要暂停.
  364. }
  365. }
  366. [[CloudStorageDownloadCenter sharedInstance]updateDownloadStatusWithcsfileDownUpModels:tempArray downUpStatus:downUpStatus];
  367. }];
  368. //DB 或者 http 获取所有文件夹下的文件
  369. //这里还是需要获取所有文件信息,需要批量操作上传下载.
  370. }
  371. NSInteger index = [weakself.processDataArray indexOfObject:csFileDownUpFrameModel];
  372. NSIndexPath *indexPath = [NSIndexPath indexPathForRow:index inSection:0];
  373. [weakTableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationNone];
  374. [weakTableView scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionNone animated:YES];
  375. };
  376. csFileDownUpCell.fileDownUpSuccessBlock = ^(CSFileDownUpFrameModel *downUpFrameModel){
  377. NSInteger index = 0;
  378. if (downUpFrameModel.csFileDownUpModel.downUpType == DownUpModelUp) {
  379. index = [weakself.uploadProcessDataArray indexOfObject:downUpFrameModel];
  380. [weakself.uploadProcessDataArray removeObject:downUpFrameModel];
  381. [weakself.uploadFinishDataArray insertObject:downUpFrameModel atIndex:0];
  382. }else{
  383. index = [weakself.downloadProcessDataArray indexOfObject:downUpFrameModel];
  384. [weakself.downloadProcessDataArray removeObject:downUpFrameModel];
  385. [weakself.downloadFinishDataArray insertObject:downUpFrameModel atIndex:0];
  386. }
  387. #warning 2017-07-03 待优化.这里的成功和center传的状态变更有冲突,导致位置变化crash.[weakTableView moveRowAtIndexPath:[NSIndexPath indexPathForRow:index inSection:0] toIndexPath:[NSIndexPath indexPathForRow:0 inSection:1]]
  388. //or 先next再sucess.
  389. dispatch_async(dispatch_get_main_queue(), ^{
  390. if (downUpFrameModel.csFileDownUpModel.downUpType == weakself.downUpModel) {
  391. [weakTableView reloadData];
  392. // [weakTableView moveRowAtIndexPath:[NSIndexPath indexPathForRow:index inSection:0] toIndexPath:[NSIndexPath indexPathForRow:0 inSection:1]];//无法更新num.
  393. }
  394. });
  395. };
  396. //
  397. csFileDownUpCell.extensionOpBlock = ^(ExtensionOP extensionOP, CSFileDownUpFrameModel *csFileDownUpFrameModel){
  398. switch (extensionOP) {
  399. case ExtensionOPDelete:
  400. [weakself deleteFile:csFileDownUpFrameModel];
  401. break;
  402. case ExtensionOPShare:
  403. [weakself shareFile:csFileDownUpFrameModel];
  404. break;
  405. default:
  406. break;
  407. }
  408. };
  409. return csFileDownUpCell;
  410. }
  411. - (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
  412. {
  413. switch (self.downUpModel) {
  414. case DownUpModelDown:
  415. if (section == 0) {
  416. return [NSString stringWithFormat:@"正在下载 (%ld)",self.processDataArray.count];
  417. }else if (section == 1){
  418. return [NSString stringWithFormat:@"下载完成 (%ld)",self.finishDataArray.count];
  419. }
  420. break;
  421. case DownUpModelUp:
  422. if (section == 0) {
  423. return [NSString stringWithFormat:@"正在上传 (%ld)",self.processDataArray.count];
  424. }else if (section == 1){
  425. return [NSString stringWithFormat:@"上传完成 (%ld)",self.finishDataArray.count];
  426. }
  427. break;
  428. default:
  429. break;
  430. }
  431. return 0;
  432. }
  433. - (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
  434. {
  435. if (section == 0) {
  436. return self.processDataArray.count?40:0;
  437. }else return self.finishDataArray.count?40:0;
  438. }
  439. - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
  440. {
  441. CSFileDownUpFrameModel *frameModel = [self getTargetDataArrayWithIndexPath:indexPath];
  442. return frameModel.cellHeight;
  443. }
  444. #pragma mark --
  445. #pragma mark -- tableViewDelegate
  446. - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
  447. {
  448. [tableView deselectRowAtIndexPath:indexPath animated:YES];
  449. CSFileDownUpFrameModel *frameModel = [self getTargetDataArrayWithIndexPath:indexPath];
  450. if (!tableView.allowsMultipleSelection) {
  451. if (!frameModel.csFileDownUpModel.isdir) {
  452. if (frameModel.csFileDownUpModel.downUpStatus == DownUpStatusSuccess) {
  453. NSString *fileRouter = nil;
  454. if (frameModel.csFileDownUpModel.fileSouce == FileSourceFileLocal) {
  455. if (frameModel.csFileDownUpModel.fileType == FileTypeImage) {
  456. fileRouter = [NSString stringWithFormat:@"%@/%@",PhotosMessageDir,frameModel.csFileDownUpModel.localRootPath];
  457. }else fileRouter = [NSString stringWithFormat:@"%@/%@",FileFolderFullRouter,frameModel.csFileDownUpModel.localRootPath];
  458. }else fileRouter = [NSString stringWithFormat:@"%@/%@",CloudStorageFullRouter,frameModel.csFileDownUpModel.localRootPath];
  459. [[FileUtils shareFileUtils]filePreViewWithOrigionPath:[NSString stringWithFormat:@"%@",fileRouter] showController:self];
  460. }
  461. }else{
  462. CSFileTransListController *fileTransListControll = [CSFileTransListController new];
  463. fileTransListControll.pid = frameModel.csFileDownUpModel.sid;
  464. fileTransListControll.downUpModel = frameModel.csFileDownUpModel.downUpType;
  465. fileTransListControll.title = frameModel.csFileDownUpModel.name;
  466. [self.navigationController pushViewController:fileTransListControll animated:YES];
  467. }
  468. }else{
  469. #warning 2017-07-20 未完成上传的文件不可分享.sid无.待进一步优化.
  470. frameModel.isSelected = !frameModel.isSelected;
  471. if (frameModel.isSelected) {
  472. [self.muiltSelectFilesArray addObject:frameModel];
  473. }else [self.muiltSelectFilesArray removeObject:frameModel];
  474. if (self.muiltSelectFilesArray.count) {
  475. self.extensionView.disable = NO;
  476. }else self.extensionView.disable = YES;
  477. [tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationNone];
  478. }
  479. }
  480. #pragma mark --
  481. #pragma mark -- celOp汇总
  482. - (void)deleteFiles:(NSArray<CSFileDownUpFrameModel*> *)files
  483. {
  484. //下载同时删除本地文件.多数据同一文件的情况--,不同pid,同name和Md5文件
  485. //上传只删除数据库.
  486. __block NSMutableArray *tempArray = [NSMutableArray array];
  487. [files enumerateObjectsUsingBlock:^(CSFileDownUpFrameModel * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
  488. [tempArray addObject:obj.csFileDownUpModel];
  489. }];
  490. __weak typeof(self)weakself = self;
  491. //暂时只删除数据库,如果是文件夹,则递归删除.
  492. [kCloudStorageDB deleteCSDownUpFiles:tempArray ResultBlock:^(NSArray *files) {
  493. //取消任务.
  494. if (weakself.downUpModel == DownUpModelDown) {
  495. [[CloudStorageDownloadCenter sharedInstance]updateDownloadStatusWithcsfileDownUpModels:files downUpStatus:DownUpStatusPause];
  496. }else{
  497. [[CloudStorageUploadCenter sharedInstance]updateOneUploadStatusWithcsfileDownUpModels:files downUpStatus:DownUpStatusPause];
  498. }
  499. //如果一个md5和name相同的数据库只有1个,则删除文件,否则只删除文件.
  500. for(CSFileDownUpModel *csFileDownUpModel in files) {
  501. if (!csFileDownUpModel.isdir && csFileDownUpModel.fileSouce == FileSourceCSCloud) {
  502. NSError *error = nil;
  503. [[NSFileManager defaultManager]removeItemAtPath:[NSString stringWithFormat:@"%@/%@",CloudStorageFullRouter,csFileDownUpModel.localRootPath] error:&error];
  504. }
  505. }
  506. }];
  507. [self.finishDataArray removeObjectsInArray:files];
  508. [self.processDataArray removeObjectsInArray:files];
  509. [self.mainTableView reloadData];
  510. if (self.muiltSelectFilesArray.count) {
  511. [self.muiltSelectFilesArray removeAllObjects];
  512. self.extensionView.disable = YES;
  513. }
  514. }
  515. - (void)deleteFile:(CSFileDownUpFrameModel *)file
  516. {
  517. [self deleteFiles:@[file]];
  518. }
  519. - (void)shareFiles:(NSArray<CSFileDownUpFrameModel*> *)files
  520. {
  521. // __block NSMutableArray *tempArray = [NSMutableArray array];
  522. //
  523. // [files enumerateObjectsUsingBlock:^(CSFileDownUpFrameModel * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
  524. // [tempArray addObject:obj.csFileDownUpModel];
  525. // }];
  526. //
  527. // NewMessageTransController *tanrsController = [NewMessageTransController new];
  528. // tanrsController.csfilesArray = tempArray;
  529. // tanrsController.isDisableMulitselect = YES;
  530. // IWNavigationController *navCor = [[IWNavigationController alloc]initWithRootViewController:tanrsController];
  531. //
  532. // [self.navigationController presentViewController:navCor animated:YES completion:nil];
  533. }
  534. - (void)shareFile:(CSFileDownUpFrameModel *)file
  535. {
  536. [self shareFiles:@[file]];
  537. }
  538. - (void)dealloc
  539. {
  540. }
  541. @end