| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009 |
- //
- // FileTransListController.m
- // zhuxun
- //
- // Created by winsoft on 17/6/22.
- //
- //
- #import "CSFileTransListController.h"
- #import "IWNavigationController.h"
- #import "CSTabBarController.h"
- //#import "NewMessageTransController.h"
- #import "CSFileDownUpCell.h"
- #import "CloudStorageDB.h"
- #import "CloudStorageUploadCenter.h"
- #import "CloudStorageDownloadCenter.h"
- #import "FileUtils.h"
- #import "UIBarButtonItem+Addition.h"
- /**
- * 单某个文件夹下的文件(夹)操作后(上传下载成功,暂停,开始上传下载),通知上层文件夹更新状态,支持递归
- *
- * @param selfFileDownUpModels 实际操作的文件
- * @param parentFileDownUpModel 当前操作的父文件夹
- * @param downUpStatus 实际操作
- */
- typedef void (^ParentFileResponseSubFilesBlock)(NSArray <CSFileDownUpModel *> *selfFileDownUpModels,CSFileDownUpModel *parentFileDownUpModel, DownUpStatus downUpStatus);
- #define KSegmentH 40
- @interface CSFileTransListController()<UITableViewDelegate, UITableViewDataSource>
- @property (nonatomic , weak) UISegmentedControl *segmentControl;
- @property (nonatomic , weak) UITableView *mainTableView;
- @property (nonatomic , weak) CSFileExtensionViewForCell *extensionView;
- @property (nonatomic , copy) NSString *pid;
- //父节点.
- @property (nonatomic , strong) CSFileDownUpModel *parentCSFileDownUpModel;
- @property (nonatomic , assign) DownUpModel downUpModel;
- @property (nonatomic , strong) ParentFileResponseSubFilesBlock parentFileResponseSubFilesBlock;
- @property (nonatomic , strong) NSMutableArray *processDataArray;
- @property (nonatomic , strong) NSMutableArray *finishDataArray;
- @property (nonatomic , strong) NSMutableArray *uploadProcessDataArray;
- @property (nonatomic , strong) NSMutableArray *uploadFinishDataArray;
- @property (nonatomic , strong) NSMutableArray *downloadProcessDataArray;
- @property (nonatomic , strong) NSMutableArray *downloadFinishDataArray;
- @property (nonatomic , strong) NSMutableArray *muiltSelectFilesArray;
- @end
- @implementation CSFileTransListController
- - (NSMutableArray *)processDataArray
- {
- if (self.downUpModel == DownUpModelUp) {
- return self.uploadProcessDataArray;
- }else return self.downloadProcessDataArray;
- }
- - (NSMutableArray *)finishDataArray
- {
- if (self.downUpModel == DownUpModelDown) {
- return self.downloadFinishDataArray;
- }else return self.uploadFinishDataArray;
- }
- - (NSMutableArray *)uploadProcessDataArray
- {
- if (!_uploadProcessDataArray) {
- _uploadProcessDataArray = [NSMutableArray array];
- }
- return _uploadProcessDataArray;
- }
- - (NSMutableArray *)uploadFinishDataArray
- {
- if (!_uploadFinishDataArray) {
- _uploadFinishDataArray = [NSMutableArray array];
- }
- return _uploadFinishDataArray;
- }
- - (NSMutableArray *)downloadProcessDataArray
- {
- if (!_downloadProcessDataArray) {
- _downloadProcessDataArray = [NSMutableArray array];
- }
-
- return _downloadProcessDataArray;
- }
- - (NSMutableArray *)downloadFinishDataArray
- {
- if (!_downloadFinishDataArray) {
- _downloadFinishDataArray = [NSMutableArray array];
- }
-
- return _downloadFinishDataArray;
- }
- - (NSMutableArray *)muiltSelectFilesArray
- {
- if (!_muiltSelectFilesArray) {
- _muiltSelectFilesArray = [NSMutableArray array];
- }
-
- return _muiltSelectFilesArray;
- }
- - (void)viewDidLoad
- {
- [super viewDidLoad];
-
- if([self respondsToSelector:@selector(setEdgesForExtendedLayout:)])
- {
- self.edgesForExtendedLayout = UIRectEdgeNone;
- }
-
- if (!self.pid) {
- self.pid = @"0";
- }
-
- if ([self.pid isEqualToString:@"0"]) {
- self.title = @"传输列表";
- }
- 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];
-
- [self initSubviews];
-
- //待取消.使用reload并判断文件状态,是否需要移动.
- [self initData];
-
- }
- - (void)viewWillAppear:(BOOL)animated
- {
- [super viewWillAppear:animated];
-
- //需要重新注册进度block
- [self.mainTableView reloadData];
-
- [self registeUploadCenter];
-
- [self registeDownloadCenter];
-
- if ([self.pid isEqualToString:@"0"]) {
- [self registerFileFolderDownloadNotoice];
- }
-
- }
- #warning 2017-08-04 bug之.如果退出进入一个未完成的文件夹,则上层进度不会再通知上上层,导致数据不会刷新.
- - (void)viewWillDisappear:(BOOL)animated
- {
- [super viewWillDisappear:animated];
-
- }
- - (void)muiltSelect
- {
- [self.muiltSelectFilesArray removeAllObjects];
-
- self.mainTableView.allowsMultipleSelection = !self.mainTableView.allowsMultipleSelection;
-
- [self.mainTableView reloadData];
-
-
- __weak typeof(self)weakself = self;
- __weak typeof(self.mainTableView)weakTableView = self.mainTableView;
-
- if (self.mainTableView.allowsMultipleSelection) {
- CSFileExtensionViewForCell *extensionView = [[CSFileExtensionViewForCell alloc]initWithItmes:@[@{@"icon":@"file_share_normal",@"title":@"分享",@"opType":@(ExtensionOPShare)},@{@"icon":@"file_delete_normal",@"title":@"删除",@"opType":@(ExtensionOPDelete)}]];
-
-
- extensionView.extensionOpBlock = ^(ExtensionOP extensionOP, CSFileDownUpFrameModel *csFileDownUpFrameModel){
-
- switch (extensionOP) {
- case ExtensionOPDelete:
- [weakself deleteFiles:self.muiltSelectFilesArray];
- break;
-
- case ExtensionOPShare:
- //yidong 文件夹;
- [weakself shareFiles:self.muiltSelectFilesArray];
- break;
-
- default:
- break;
- }
- };
-
- extensionView.disable = YES;
-
- extensionView.frame = CGRectMake(0, self.view.frame.size.height - FileExtensionViewH, SCREEN_WIDTH, FileExtensionViewH);
-
- [self.view addSubview:extensionView];
-
- self.extensionView = extensionView;
-
- self.segmentControl.enabled = NO;
- }else{
-
- [self.extensionView removeFromSuperview];
- self.extensionView = nil;
- self.segmentControl.enabled = YES;
- }
-
- //调整tableview.frame
- 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));
- }
- - (void)initSubviews{
-
- NSArray *segtitiles = segtitiles = @[@"下载列表",@"上传列表"];
- UISegmentedControl *segmentControl = [[UISegmentedControl alloc]initWithItems:segtitiles];
- segmentControl.apportionsSegmentWidthsByContent = NO;
- segmentControl.tintColor = [UIColor clearColor];//去掉颜色,现在整个segment都看不见
- segmentControl.backgroundColor = [UIColor colorWithRed:0.969 green:0.969 blue:0.961 alpha:1.000];
- NSDictionary* selectedTextAttributes = @{NSFontAttributeName:[UIFont boldSystemFontOfSize:14],
- NSForegroundColorAttributeName: [UIColor colorWithRed:0.000 green:0.475 blue:1.000 alpha:1.000]};
- [segmentControl setTitleTextAttributes:selectedTextAttributes forState:UIControlStateSelected];//设置文字属性
- NSDictionary* unselectedTextAttributes = @{NSFontAttributeName:[UIFont boldSystemFontOfSize:14],
- NSForegroundColorAttributeName: [UIColor colorWithWhite:0.510 alpha:1.000]};
- [segmentControl setTitleTextAttributes:unselectedTextAttributes forState:UIControlStateNormal];
- segmentControl.segmentedControlStyle = UISegmentedControlStyleBar;
- [segmentControl addTarget:self action:@selector(segmentaction:) forControlEvents:UIControlEventValueChanged];
- segmentControl.layer.borderColor = LineForSubLineViewColor.CGColor;
- segmentControl.layer.borderWidth = 0.5;
- segmentControl.selectedSegmentIndex = 0;
-
- if ([self.pid isEqualToString:@"0"]) {
- segmentControl.frame = CGRectMake(0, 0, self.view.frame.size.width, KSegmentH);
- }else segmentControl.frame = CGRectZero;
-
- [self.view addSubview:segmentControl];
- self.segmentControl = segmentControl;
-
-
- 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];
- mainTableView.separatorStyle = UITableViewCellSeparatorStyleNone;
- mainTableView.delegate = self;
- mainTableView.dataSource = self;
- mainTableView.tableFooterView = [[UIView alloc]init];
- mainTableView.tableFooterView.backgroundColor = [UIColor clearColor];
- [self.view addSubview:mainTableView];
- self.mainTableView = mainTableView;
-
- }
- #warning 2017-06-30 获取doing和waiting的数据,加入center进行任务, pause的手动处理.
- - (void)initData
- {
- [Utils showWaitingToView:self.view];
-
- __weak typeof(self)weakSelf = self;
-
- __weak typeof(self.view)weakView = self.view;
-
- __weak typeof(self.mainTableView)weakTableView = self.mainTableView;
-
- dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
- [weakSelf.downloadProcessDataArray removeAllObjects];
- [weakSelf.downloadFinishDataArray removeAllObjects];
- [weakSelf.uploadProcessDataArray removeAllObjects];
- [weakSelf.uploadFinishDataArray removeAllObjects];
-
- [kCloudStorageDB getSubFileFolderUpSuccessFileWithPid:weakSelf.pid ResultBlock:^(NSArray *result) {
-
- for (CSFileDownUpModel *csFileDownUpModel in result) {
- CSFileDownUpFrameModel *frameModel = [[CSFileDownUpFrameModel alloc]initWithCSFileDownUpModel:csFileDownUpModel];
- [weakSelf.uploadFinishDataArray addObject:frameModel];
-
- }
- }];
-
- [kCloudStorageDB getSubFileFolderUpUnFinishedFileWithPid:weakSelf.pid ResultBlock:^(NSArray *result) {
-
- for (CSFileDownUpModel *csFileDownUpModel in result) {
-
- CSFileDownUpFrameModel *frameModel = [[CSFileDownUpFrameModel alloc]initWithCSFileDownUpModel:csFileDownUpModel];
- [weakSelf.uploadProcessDataArray addObject:frameModel];
-
- }
- }];
-
- //下载成功的条件: 符合条件pid的文件,以及文件夹且子文件都成功.
-
- NSLog(@"Finished递归start-ge");
- [kCloudStorageDB getSubFileFolderDownSuccessFileWithPid:weakSelf.pid ResultBlock:^(NSArray *result) {
- NSLog(@"Finished递归end-ge,result数量%ld",result.count);
- for (CSFileDownUpModel *csFileDownUpModel in result) {
- CSFileDownUpFrameModel *frameModel = [[CSFileDownUpFrameModel alloc]initWithCSFileDownUpModel:csFileDownUpModel];
- [weakSelf.downloadFinishDataArray addObject:frameModel];
-
- }
-
- }];
-
- //文件夹单独放出来进行判断.
- NSLog(@"UnFinished递归start-ge");
-
- [kCloudStorageDB getSubFileFolderDownUnFinishedFileWithPid:weakSelf.pid ResultBlock:^(NSArray *result) {
- NSLog(@"UnFinished递归end-ge,result数量%ld",result.count);
-
-
- for (CSFileDownUpModel *csFileDownUpModel in result) {
-
- CSFileDownUpFrameModel *frameModel = [[CSFileDownUpFrameModel alloc]initWithCSFileDownUpModel:csFileDownUpModel];
-
- [weakSelf.downloadProcessDataArray addObject:frameModel];
-
- }
-
- //内涵尺寸计算,数据多2000+耗时6s,分批加载.
- NSLog(@"多framemode生成效率");
- }];
-
- NSLog(@"结束");
- dispatch_async(dispatch_get_main_queue(), ^{
-
- [Utils HiddenWaitingToView:weakView];
-
- [weakTableView reloadData];
- });
-
-
-
- });
-
-
-
- }
- //间隔一秒种.防止和上一个成功的ui刷新冲突
- - (void)registeUploadCenter
- {
- __weak typeof(self)weakself = self;
- __weak typeof(self.mainTableView)weakTableView = self.mainTableView;
- //上传暂不考虑文件夹
- [CloudStorageUploadCenter sharedInstance].fileUpStatusChangeBlock = ^(CSFileDownUpModel *csFileDownUpModel){
-
-
- NSPredicate *predicate = [NSPredicate predicateWithFormat:@"csFileDownUpModel.downUpUUID = %@", csFileDownUpModel.downUpUUID]; //过滤条件
-
- // NSMutableArray *tempArray = [NSMutableArray array];
-
- NSArray *filteredArray= [weakself.uploadProcessDataArray filteredArrayUsingPredicate:predicate]; //最终结果filteredArray
-
- if (filteredArray.count) {
- CSFileDownUpFrameModel *uploadingFrameModel = filteredArray[0];
- uploadingFrameModel.csFileDownUpModel.downUpStatus = csFileDownUpModel.downUpStatus;
-
- if (weakself.downUpModel == DownUpModelUp) {
-
- NSInteger index = [weakself.uploadProcessDataArray indexOfObject:uploadingFrameModel];
-
- dispatch_async(dispatch_get_main_queue(), ^{
-
- [weakTableView reloadData];
- // [weakTableView reloadRowsAtIndexPaths:@[[NSIndexPath indexPathForRow:index inSection:0]] withRowAnimation:UITableViewRowAnimationNone];
- });
-
- }
-
-
-
-
- }else{
-
- //是否可能不存在需要新增的情况>?
- }
-
- };
-
- //cell register ui process block.
- }
- - (void)registeDownloadCenter
- {
- //先判断文件是否存在,没有,则判断上层(递归)文件夹是否存在.,或则反过来,判断所有的文件夹是否包含通知过来的文件,有则开始更新该文件夹cell.,同文件不同位置的情况?不管ifelase,都判断?,先文件,再文件夹.
- __weak typeof(self)weakself = self;
- __weak typeof(self.mainTableView)weakTableView = self.mainTableView;
- //文件开始下载的通知
- [CloudStorageDownloadCenter sharedInstance].fileDownStatusChangeBlock = ^(CSFileDownUpModel *fileDownUpModel){
-
- NSPredicate *predicate = [NSPredicate predicateWithFormat:@"csFileDownUpModel.downUpUUID = %@", fileDownUpModel.downUpUUID]; //过滤条件
- NSArray *filteredArray= [weakself.downloadProcessDataArray filteredArrayUsingPredicate:predicate]; //最终结果filteredArray
-
- if (filteredArray.count) {
- CSFileDownUpFrameModel *downloaddingFrameModel = filteredArray[0];
- downloaddingFrameModel.csFileDownUpModel.downUpStatus = fileDownUpModel.downUpStatus;
-
- if (weakself.downUpModel == DownUpModelDown) {
-
- NSInteger index = [weakself.downloadProcessDataArray indexOfObject:downloaddingFrameModel];
-
- dispatch_async(dispatch_get_main_queue(), ^{
-
- [weakTableView reloadData];
-
- // [weakTableView reloadRowsAtIndexPaths:@[[NSIndexPath indexPathForRow:index inSection:0]] withRowAnimation:UITableViewRowAnimationNone];
-
- });
-
- }
-
- } else if(!filteredArray.count){
- #warning 2017-07-20 同一文件不同位置的.情况是否已考虑?
- // //开始文件夹判断.
- // //获取当前所有文件夹
- NSPredicate *predicate = [NSPredicate predicateWithFormat:@"csFileDownUpModel.isdir = 1"]; //过滤条件
- NSArray *filteredArray= [weakself.downloadProcessDataArray filteredArrayUsingPredicate:predicate]; //最终结果filteredArray
- for (CSFileDownUpFrameModel *downloaddingFolderFrameModel in filteredArray) {
- //md5,name.
- //判断是否有同文件.
- NSPredicate *subPredicate = [NSPredicate predicateWithFormat:@"md5 = %@ AND name = %@",fileDownUpModel.md5,fileDownUpModel.name]; //过滤条件
- NSArray *subfilteredArray= [downloaddingFolderFrameModel.csFileDownUpModel.subFileDownUpModels filteredArrayUsingPredicate:subPredicate]; //最终结果filteredArray
- if (subfilteredArray.count) {
- //刷新当前文件夹.
- downloaddingFolderFrameModel.csFileDownUpModel.downUpStatus = fileDownUpModel.downUpStatus;
- if (weakself.downUpModel == DownUpModelDown) {
- NSInteger index = [weakself.downloadProcessDataArray indexOfObject:downloaddingFolderFrameModel];
- dispatch_async(dispatch_get_main_queue(), ^{
- [weakTableView reloadData];
- // [weakTableView reloadRowsAtIndexPaths:@[[NSIndexPath indexPathForRow:index inSection:0]] withRowAnimation:UITableViewRowAnimationNone];
- });
-
- }
-
- }
-
-
- }
-
- }
-
-
- };
- }
- - (void)registerFileFolderDownloadNotoice
- {
- __weak typeof(self)weakSelf = self;
- __weak typeof(self.mainTableView)weakTableView = self.mainTableView;
- //新增文件夹下载
- CSTabBarController *tabBarController = (CSTabBarController *)self.tabBarController;
-
- tabBarController.cloudControlerFileDownloadBlock = ^(NSArray *dbModels){
-
-
- [weakSelf initData];
-
- };
-
- }
- - (void)segmentaction:(UISegmentedControl *)setmentController
- {
-
- self.downUpModel = (DownUpModel)setmentController.selectedSegmentIndex;
-
- [self.mainTableView reloadData];
-
- }
- #pragma mark --
- #pragma mark -- tableviewDatasource
- - (CSFileDownUpFrameModel *)getTargetDataArrayWithIndexPath:(NSIndexPath *)indexPath
- {
- NSMutableArray *dataArray = nil;
- if (indexPath.section == 0) {
- dataArray = self.processDataArray;
- }else if(indexPath.section == 1)
- {
- dataArray = self.finishDataArray;
- }
- CSFileDownUpFrameModel *frameModel = dataArray[indexPath.row];
-
- return frameModel;
- }
- - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
- {
- return 2;
-
- }
- - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
- {
- if (section == 0) {
- return self.processDataArray.count;
- }else if(section == 1)
- {
- return self.finishDataArray.count;
- }
-
- return 0;
- }
- - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
- {
-
- CSFileDownUpFrameModel *frameModel = [self getTargetDataArrayWithIndexPath:indexPath];
-
- 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)}]];
-
- csFileDownUpCell.allowsMultipleSelection = tableView.allowsMultipleSelection;
-
- csFileDownUpCell.csFileDownUpFrameModel = frameModel;
-
- csFileDownUpCell.indexPath = indexPath;
-
- __weak typeof(self.mainTableView)weakTableView = self.mainTableView;
- __weak typeof(self)weakself = self;
-
- csFileDownUpCell.extensionSwitchBlock = ^(CSFileDownUpFrameModel *csFileDownUpFrameModel){
-
- NSInteger index = [weakself.finishDataArray indexOfObject:csFileDownUpFrameModel];
-
- NSIndexPath *indexPath = [NSIndexPath indexPathForRow:index inSection:1];
-
- csFileDownUpFrameModel.isFileExtensionOP = !csFileDownUpFrameModel.isFileExtensionOP;
-
- [weakTableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationNone];
-
- [weakTableView scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionNone animated:YES];
-
- };
-
- csFileDownUpCell.downUpStatusBlock = ^(CSFileDownUpFrameModel *csFileDownUpFrameModel, DownUpStatus downUpStatus){
- csFileDownUpFrameModel.csFileDownUpModel.downUpStatus = downUpStatus;
- NSInteger index = [weakself.processDataArray indexOfObject:csFileDownUpFrameModel];
-
- NSIndexPath *indexPath = [NSIndexPath indexPathForRow:index inSection:0];
-
- [weakTableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationNone];
-
- [weakTableView scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionNone animated:YES];
-
- //db save
- [kCloudStorageDB updateCSDownUpFileStatusWithCSFileDownUpModel:csFileDownUpFrameModel.csFileDownUpModel];
-
-
- //center notice.
- if (!csFileDownUpFrameModel.csFileDownUpModel.isdir) {
-
- if (csFileDownUpFrameModel.csFileDownUpModel.downUpType == DownUpModelUp) {
- //
- [[CloudStorageUploadCenter sharedInstance]updateOneUploadStatusWithcsfileDownUpModel:csFileDownUpFrameModel.csFileDownUpModel downUpStatus:downUpStatus];
-
- }else if (csFileDownUpFrameModel.csFileDownUpModel.downUpType == DownUpModelDown)
- {
- [[CloudStorageDownloadCenter sharedInstance]updateOneDownloadStatusWithcsfileDownUpModel:csFileDownUpFrameModel.csFileDownUpModel downUpStatus:downUpStatus];
- }
-
- //如果上层文件夹下所有文件都暂停,则上层文件夹状态也为暂停,反之如果文件夹初始暂停,其中某个文件开始,则设置文件夹状态为doing.
-
- if (weakself.parentFileResponseSubFilesBlock) {
- weakself.parentFileResponseSubFilesBlock(@[csFileDownUpFrameModel.csFileDownUpModel],weakself.parentCSFileDownUpModel,downUpStatus);
- }
-
- }else{
- NSMutableArray *tempArray = [NSMutableArray array];
-
- for (CSFileDownUpModel *csFileDownUpModel in csFileDownUpFrameModel.csFileDownUpModel.subFileDownUpModels) {
-
- if (csFileDownUpFrameModel.csFileDownUpModel.downUpType == DownUpModelDown && csFileDownUpModel.downUpStatus != DownUpStatusSuccess) {
-
- csFileDownUpModel.downUpStatus = csFileDownUpFrameModel.csFileDownUpModel.downUpStatus;
-
- if (!csFileDownUpModel.isdir && (csFileDownUpModel.downUpStatus != DownUpStatusSuccess )) {
-
- [tempArray addObject:csFileDownUpModel];
- }
-
- //内层所有文件夹暂停下载,则外层文件夹也需要暂停.
-
- }
-
- }
-
- [[CloudStorageDownloadCenter sharedInstance]updateDownloadStatusWithcsfileDownUpModels:tempArray downUpStatus:downUpStatus];
-
- if (weakself.parentFileResponseSubFilesBlock) {
- weakself.parentFileResponseSubFilesBlock(tempArray,weakself.parentCSFileDownUpModel,downUpStatus);
- }
-
- }
-
-
- };
-
- csFileDownUpCell.fileDownUpSuccessBlock = ^(CSFileDownUpFrameModel *downUpFrameModel){
-
-
- NSInteger index = 0;
-
- if (downUpFrameModel.csFileDownUpModel.downUpType == DownUpModelUp) {
-
- index = [weakself.uploadProcessDataArray indexOfObject:downUpFrameModel];
-
- [weakself.uploadProcessDataArray removeObject:downUpFrameModel];
- [weakself.uploadFinishDataArray insertObject:downUpFrameModel atIndex:0];
-
-
- }else{
-
- index = [weakself.downloadProcessDataArray indexOfObject:downUpFrameModel];
-
- [weakself.downloadProcessDataArray removeObject:downUpFrameModel];
- [weakself.downloadFinishDataArray insertObject:downUpFrameModel atIndex:0];
- }
-
- //or 先next再sucess.
- dispatch_async(dispatch_get_main_queue(), ^{
- if (downUpFrameModel.csFileDownUpModel.downUpType == weakself.downUpModel) {
-
- [weakTableView reloadData];
- }
-
- });
- #warning 2017-08-04
- //等到文件夹成功不可取.(需每个成功,时时更新,解决方案:控制器block,(另开方法)注册down/up,center,每个success的block回调,遍历isdir/md5 file 进行判断.)
- if (weakself.parentFileResponseSubFilesBlock) {
- weakself.parentFileResponseSubFilesBlock(!downUpFrameModel.csFileDownUpModel.isdir?@[downUpFrameModel.csFileDownUpModel]:downUpFrameModel.csFileDownUpModel.subFileDownUpModels ,weakself.parentCSFileDownUpModel,DownUpStatusSuccess);
- }
-
- };
- //
- csFileDownUpCell.extensionOpBlock = ^(ExtensionOP extensionOP, CSFileDownUpFrameModel *csFileDownUpFrameModel){
-
- switch (extensionOP) {
- case ExtensionOPDelete:
-
- [weakself deleteFile:csFileDownUpFrameModel];
-
- break;
-
-
- case ExtensionOPShare:
-
- [weakself shareFile:csFileDownUpFrameModel];
-
- break;
-
- default:
- break;
- }
-
-
- };
-
- return csFileDownUpCell;
- }
- - (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
- {
- switch (self.downUpModel) {
- case DownUpModelDown:
- if (section == 0) {
- return [NSString stringWithFormat:@"正在下载 (%ld)",self.processDataArray.count];
- }else if (section == 1){
-
- return [NSString stringWithFormat:@"下载完成 (%ld)",self.finishDataArray.count];
- }
- break;
- case DownUpModelUp:
- if (section == 0) {
- return [NSString stringWithFormat:@"正在上传 (%ld)",self.processDataArray.count];
- }else if (section == 1){
-
- return [NSString stringWithFormat:@"上传完成 (%ld)",self.finishDataArray.count];
- }
- break;
-
- default:
- break;
- }
-
- return 0;
- }
- - (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
- {
- if (section == 0) {
- return self.processDataArray.count?40:0;
- }else return self.finishDataArray.count?40:0;
- }
- - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
- {
- CSFileDownUpFrameModel *frameModel = [self getTargetDataArrayWithIndexPath:indexPath];
-
- return frameModel.cellHeight;
- }
- #pragma mark --
- #pragma mark -- tableViewDelegate
- - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
- {
- __weak typeof(self)weakSelf = self;
-
- [tableView deselectRowAtIndexPath:indexPath animated:YES];
-
- CSFileDownUpFrameModel *frameModel = [self getTargetDataArrayWithIndexPath:indexPath];
-
- if (!tableView.allowsMultipleSelection) {
- if (!frameModel.csFileDownUpModel.isdir) {
- if (frameModel.csFileDownUpModel.downUpStatus == DownUpStatusSuccess) {
-
- NSString *fileRouter = nil;
-
- if (frameModel.csFileDownUpModel.fileSouce == FileSourceFileLocal) {
- if (frameModel.csFileDownUpModel.fileType == FileTypeImage) {
- fileRouter = [NSString stringWithFormat:@"%@/%@",PhotosMessageDir,frameModel.csFileDownUpModel.localRootPath];
- }else fileRouter = [NSString stringWithFormat:@"%@/%@",FileFolderFullRouter,frameModel.csFileDownUpModel.localRootPath];
- }else fileRouter = [NSString stringWithFormat:@"%@/%@",CloudStorageFullRouter,frameModel.csFileDownUpModel.localRootPath];
-
- [[FileUtils shareFileUtils]filePreViewWithOrigionPath:[NSString stringWithFormat:@"%@",fileRouter] showController:self];
- }
- }else{
-
-
- CSFileTransListController *fileTransListControll = [CSFileTransListController new];
-
- fileTransListControll.parentCSFileDownUpModel = frameModel.csFileDownUpModel;
-
- fileTransListControll.pid = frameModel.csFileDownUpModel.sid;
-
- fileTransListControll.downUpModel = frameModel.csFileDownUpModel.downUpType;
-
- fileTransListControll.parentFileResponseSubFilesBlock = ^(NSArray <CSFileDownUpModel *> *selfFileDownUpModels,CSFileDownUpModel *parentFileDownUpModel, DownUpStatus downUpStatus){
-
- [weakSelf subFileOperateWithSubFiles:selfFileDownUpModels parentFolderFileModel:parentFileDownUpModel downUpStutas:downUpStatus];
- };
-
- fileTransListControll.title = frameModel.csFileDownUpModel.name;
-
- [self.navigationController pushViewController:fileTransListControll animated:YES];
-
- }
-
- }else{
-
- #warning 2017-07-20 未完成上传的文件不可分享.sid无.待进一步优化.
- frameModel.isSelected = !frameModel.isSelected;
-
- if (frameModel.isSelected) {
- [self.muiltSelectFilesArray addObject:frameModel];
-
- }else [self.muiltSelectFilesArray removeObject:frameModel];
-
-
- if (self.muiltSelectFilesArray.count) {
-
- self.extensionView.disable = NO;
-
- }else self.extensionView.disable = YES;
-
- [tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationNone];
-
- }
-
- }
- - (DownUpStatus)judgeFileFolderStatusWithFileFolderModel:(CSFileDownUpModel *)csFileFolderModel
- {
- NSInteger successNum = 0;
- NSInteger faiureNum = 0;
- NSInteger doingNum = 0;
- NSInteger waitNum = 0;
- NSInteger pauseNum = 0;
-
- //暂停条件,不存在doing和wating下,只有pause和success,faiure.
- DownUpStatus fileFolderStatus = DownUpStatusSuccess;
-
- NSArray *tempArray = csFileFolderModel.subFileDownUpModels;
-
- for (CSFileDownUpModel *csFileDownUpModel in tempArray) {
-
- if (csFileDownUpModel.downUpStatus == DownUpStatusSuccess) {
- successNum ++;
- }else if (csFileDownUpModel.downUpStatus == DownUpStatusFailure)
- {
- faiureNum ++;
- }else if (csFileDownUpModel.downUpStatus == DownUpStatusDoing)
- {
- doingNum ++;
- }else if (csFileDownUpModel.downUpStatus == DownUpStatusWait)
- {
- waitNum ++;
- }else if (csFileDownUpModel.downUpStatus == DownUpStatusPause)
- {
- pauseNum ++;
- }
-
- }
-
- if (successNum == tempArray.count) {
- fileFolderStatus = DownUpStatusSuccess;
- }else if (faiureNum == tempArray.count)
- {
- fileFolderStatus = DownUpStatusFailure;
- }else if (pauseNum && !doingNum && ! waitNum)
- {
- fileFolderStatus = DownUpStatusPause;
- }else if (waitNum == tempArray.count)
- {
- fileFolderStatus = DownUpStatusWait;
- }else fileFolderStatus = DownUpStatusDoing;
-
- return fileFolderStatus;
- }
- #pragma mark --
- #pragma mark -- celOp汇总
- - (void)deleteFiles:(NSArray<CSFileDownUpFrameModel*> *)files
- {
- //下载同时删除本地文件.多数据同一文件的情况--,不同pid,同name和Md5文件
-
- //上传只删除数据库.
-
- __block NSMutableArray *tempArray = [NSMutableArray array];
-
- [files enumerateObjectsUsingBlock:^(CSFileDownUpFrameModel * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
- [tempArray addObject:obj.csFileDownUpModel];
- }];
-
-
- __weak typeof(self)weakself = self;
- [kCloudStorageDB deleteCSDownUpFiles:tempArray downUpType:self.downUpModel ResultBlock:^(NSArray *files) {
-
- //取消任务.
- if (weakself.downUpModel == DownUpModelDown) {
-
- [[CloudStorageDownloadCenter sharedInstance]updateDownloadStatusWithcsfileDownUpModels:files downUpStatus:DownUpStatusDelete];
-
- }else{
-
- [[CloudStorageUploadCenter sharedInstance]updateUploadStatusWithcsfileDownUpModels:files downUpStatus:DownUpStatusDelete];
-
- }
- //如果一个md5和name相同的数据库只有1个,则删除文件,否则只删除文件.
- for(CSFileDownUpModel *csFileDownUpModel in files) {
- if (!csFileDownUpModel.isdir && csFileDownUpModel.fileSouce == FileSourceCSCloud) {
- NSError *error = nil;
- [[NSFileManager defaultManager]removeItemAtPath:[NSString stringWithFormat:@"%@/%@",CloudStorageFullRouter,csFileDownUpModel.localRootPath] error:&error];
- }
- }
- }];
-
-
-
- [self.finishDataArray removeObjectsInArray:files];
- [self.processDataArray removeObjectsInArray:files];
-
- [self.mainTableView reloadData];
-
- if (self.muiltSelectFilesArray.count) {
-
- [self.muiltSelectFilesArray removeAllObjects];
-
- self.extensionView.disable = YES;
-
- }
-
- }
- - (void)deleteFile:(CSFileDownUpFrameModel *)file
- {
- [self deleteFiles:@[file]];
- }
- - (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];
- }
- - (void)shareFile:(CSFileDownUpFrameModel *)file
- {
- [self shareFiles:@[file]];
-
-
- }
- /**
- * 对父文件夹进行操作,含递归.
- */
- - (void)subFileOperateWithSubFiles:(NSArray *)subFiles parentFolderFileModel:(CSFileDownUpModel *)parentFileDownUpModel downUpStutas:(DownUpStatus)downUpStatus
- {
- __weak typeof(self)weakSelf = self;
-
- //先修改文件夹状态.
- NSArray *targetFileFolder = [weakSelf.downloadProcessDataArray filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"csFileDownUpModel.downUpUUID = %@",parentFileDownUpModel.downUpUUID]];
- //暂时不考虑同级下的文件
- // NSArray *targetSameFiles = [weakSelf.downloadProcessDataArray filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"csFileDownUpModel.md5 = %@ and csFileDownUpModel.name = %@",selfFileDownUpModel.md5,selfFileDownUpModel.name]];//获取取消父节点?for递归文件夹subfiles及文件.
- if (targetFileFolder.count) {
-
- CSFileDownUpFrameModel *folerFileDownUpFrameModel = targetFileFolder[0];
-
- for (CSFileDownUpModel *subCsFileDownUpModel in subFiles) {
-
- NSArray *targetParentFolderFiles = [folerFileDownUpFrameModel.csFileDownUpModel.subFileDownUpModels filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"md5 = %@ and name = %@",subCsFileDownUpModel.md5,subCsFileDownUpModel.name]];
-
- for (CSFileDownUpModel *currentSubFiles in targetParentFolderFiles) {
- currentSubFiles.downUpStatus = downUpStatus;
- currentSubFiles.downUpSize = subCsFileDownUpModel.downUpSize;
- }
- }
-
-
- DownUpStatus newFolderStatus = [weakSelf judgeFileFolderStatusWithFileFolderModel:folerFileDownUpFrameModel.csFileDownUpModel];
-
- if (newFolderStatus != folerFileDownUpFrameModel.csFileDownUpModel.downUpStatus) {
-
- folerFileDownUpFrameModel.csFileDownUpModel.downUpStatus = newFolderStatus;
-
- if (newFolderStatus == DownUpStatusSuccess) {
-
- [weakSelf.downloadProcessDataArray removeObject:folerFileDownUpFrameModel];
-
- [weakSelf.downloadFinishDataArray insertObject:folerFileDownUpFrameModel atIndex:0];
-
- }
-
-
- }
-
- }
-
-
- //递归.
- if (weakSelf.parentFileResponseSubFilesBlock) {
- weakSelf.parentFileResponseSubFilesBlock(subFiles,weakSelf.parentCSFileDownUpModel,downUpStatus);
- }
- }
- - (void)dealloc
- {
-
- }
- @end
|