CSFirstPageController.m 41 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128
  1. //
  2. // CSFirstPageController.m
  3. // zhuxun
  4. //
  5. // Created by winsoft on 17/6/15.
  6. //
  7. //
  8. #import <Bugly/Bugly.h>
  9. #import "CSAlertView.h"
  10. #import "CSFirstPageController.h"
  11. //#import "NewMessageTransController.h"
  12. #import "IWNavigationController.h"
  13. #import "CSTabBarController.h"
  14. #import "CSRouterSelectController.h"
  15. #import "HttpRequest.h"
  16. #import <MJExtension/MJExtension.h>
  17. #import "UIBarButtonItem+Addition.h"
  18. #import "UIActionSheet+Blocks.h"
  19. #import "UIAlertView+Blocks.h"
  20. #import "CloudStorageDownloadCenter.h"
  21. #import "CSFileCell.h"
  22. #import "CSFileExtensionViewForCell.h"
  23. #import "CloudStorageBar.h"
  24. #import "CloudStorageTableView.h"
  25. #import "CSFileTypeClassView.h"
  26. #import "CSFileFrameModel.h"
  27. #import "CloudStorageDB.h"
  28. #define TabBarHeight ((self.hidesBottomBarWhenPushed == 0) ? (self.tabBarController.tabBar.frame.size.height) : 0)
  29. //剥离ui/控制器可以复用.
  30. @interface CSFirstPageController ()<UITableViewDelegate, UITableViewDataSource, CSSearchBarDelegate>
  31. /**
  32. * 来源,可提供的网盘文件操作不同
  33. */
  34. @property (nonatomic , assign) CSFileSourceType csFileSourceType;
  35. @property (nonatomic , copy) NSString *pid;
  36. @property (nonatomic , copy) NSString *shareID;
  37. #warning 2017-07-17
  38. @property (nonatomic , weak) CloudStorageTableView *mainTableView;
  39. @property (nonatomic , weak) CSFileExtensionViewForCell *csFilesExensionView;
  40. @property (nonatomic , weak) CSFileTypeClassView *csFileTypeClassView;
  41. /**
  42. * 根据是否searchmodel 选择normal还是search array
  43. */
  44. @property (nonatomic , strong) NSMutableArray *fileModelArray;
  45. @property (nonatomic , strong) NSMutableArray *normalFilesArray;
  46. @property (nonatomic , strong) NSMutableArray *searchResultArray;
  47. @property (nonatomic , assign) BOOL searchModel;
  48. /**
  49. * 多选操作.
  50. */
  51. @property (nonatomic , strong) NSMutableArray *muilterOpFilesArray;
  52. @property (nonatomic , strong) CSFileModel *father_csFileModel;
  53. @end
  54. @implementation CSFirstPageController
  55. - (NSMutableArray *)fileModelArray
  56. {
  57. if (self.searchModel) {
  58. return self.searchResultArray;
  59. }else return self.normalFilesArray;
  60. }
  61. - (NSMutableArray *)normalFilesArray
  62. {
  63. if (!_normalFilesArray) {
  64. _normalFilesArray = [NSMutableArray array];
  65. }
  66. return _normalFilesArray;
  67. }
  68. - (NSMutableArray *)searchResultArray
  69. {
  70. if (!_searchResultArray) {
  71. _searchResultArray = [NSMutableArray array];
  72. }
  73. return _searchResultArray;
  74. }
  75. - (NSMutableArray *)muilterOpFilesArray
  76. {
  77. if (!_muilterOpFilesArray) {
  78. _muilterOpFilesArray = [NSMutableArray array];
  79. }
  80. return _muilterOpFilesArray;
  81. }
  82. //首次启动使用.
  83. + (CSFirstPageController *)csFirstPageControllerWithCSFileSourceType:(CSFileSourceType)csFileSourceType pid:(NSString *)pid shareId:(NSString *)shareId
  84. {
  85. CSFirstPageController *csFirstPageController = [[CSFirstPageController alloc]initCSFirstPageControllerWithCSFileSourceType:csFileSourceType pid:pid shareId:shareId];
  86. return csFirstPageController;
  87. }
  88. - (instancetype)initCSFirstPageControllerWithCSFileSourceType:(CSFileSourceType)csFileSourceType pid:(NSString *)pid shareId:(NSString *)shareId
  89. {
  90. if (self = [super init]) {
  91. self.csFileSourceType = csFileSourceType;
  92. _pid = pid;
  93. _shareID = shareId;
  94. if (csFileSourceType == CSFileSourceTypeSelf) {
  95. self.title = @"我的网盘";
  96. }else self.title = @"分享";
  97. self.navigationItem.leftBarButtonItem = [UIBarButtonItem itemWithTarget:self action:@selector(outCloudStorage) icon:@"returnBackArrow" highlightedIcon:nil title:nil iconSize:CGSizeMake(20, 20) fontSize:14 titleColor:[UIColor whiteColor]];
  98. }
  99. return self;
  100. }
  101. - (void)viewWillAppear:(BOOL)animated
  102. {
  103. [super viewWillAppear:animated];
  104. if (self.searchModel) {
  105. CGPoint point = CGPointMake(0, STATUSBAR_HEIGHT);
  106. // self.tabBarController.tabBar.isHidden
  107. __block CGRect adjusetedFrame = CGRectMake(point.x, point.y, SCREEN_WIDTH, SCREEN_HEIGHT - NavBarHeight + STATUSBAR_HEIGHT - TabBarHeight);
  108. [self.navigationController setNavigationBarHidden:YES animated:YES];
  109. [[UIApplication sharedApplication]setStatusBarStyle:UIStatusBarStyleDefault animated:YES];
  110. self.mainTableView.frame = adjusetedFrame;
  111. }else{
  112. __block CGRect origionFrame = CGRectMake(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT - STATUSBAR_HEIGHT - NavBarHeight - TabBarHeight);
  113. [self.navigationController setNavigationBarHidden:NO animated:YES];
  114. self.mainTableView.frame = origionFrame;
  115. }
  116. }
  117. - (void)viewDidLoad {
  118. [super viewDidLoad];
  119. if([self respondsToSelector:@selector(setEdgesForExtendedLayout:)])
  120. {
  121. self.edgesForExtendedLayout = UIRectEdgeNone;
  122. }
  123. UIBarButtonItem *muiltSelectItem = [UIBarButtonItem itemWithTarget:self action:@selector(moreOperate) icon:@"navbar_muiltSel" highlightedIcon:nil title:nil iconSize:CGSizeMake(20, 20) fontSize:14 titleColor:[UIColor whiteColor]];
  124. UIBarButtonItem *fileClassItem = [UIBarButtonItem itemWithTarget:self action:@selector(classFile) icon:nil highlightedIcon:nil title:@"分类" iconSize:CGSizeZero fontSize:14 titleColor:[UIColor whiteColor]];
  125. if ([self.pid isEqualToString:@"0"] && self.csFileSourceType == CSFileSourceTypeSelf) {
  126. self.navigationItem.rightBarButtonItems = @[muiltSelectItem, fileClassItem];
  127. }else self.navigationItem.rightBarButtonItems = @[muiltSelectItem];
  128. [self initSubViews];
  129. if (self.pid) {
  130. [self getTopFilesLists];
  131. }
  132. if (self.shareID) {
  133. [self getAllShareFiles];
  134. }
  135. }
  136. - (void)outCloudStorage
  137. {
  138. if (self.tabBarController) {
  139. [self.tabBarController dismissViewControllerAnimated:YES completion:nil];
  140. }else [self.navigationController dismissViewControllerAnimated:YES completion:nil];
  141. }
  142. - (void)moreOperate
  143. {
  144. if (self.csFileTypeClassView) {
  145. [self.csFileTypeClassView removeFromSuperview];
  146. self.csFileTypeClassView = nil;
  147. }
  148. self.mainTableView.allowsMultipleSelection = !self.mainTableView.allowsMultipleSelection;
  149. //置空.
  150. for (CSFileFrameModel *fileFrameModel in self.fileModelArray) {
  151. fileFrameModel.isFileExtensionOP = NO;
  152. fileFrameModel.isSelected = NO;
  153. }
  154. [self.muilterOpFilesArray removeAllObjects];
  155. [self.mainTableView reloadData];
  156. __weak typeof(self)weakSelf = self;
  157. __weak typeof(self.mainTableView)weakTableView = self.mainTableView;
  158. __weak typeof(self.view)weakView = self.view;
  159. if (self.mainTableView.allowsMultipleSelection) {
  160. CSFileExtensionViewForCell *extensionView = nil;
  161. if (self.csFileSourceType == CSFileSourceTypeSelf) {
  162. 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)}]];
  163. }else{
  164. extensionView = [[CSFileExtensionViewForCell alloc]initWithItmes:@[@{@"icon":@"file_down_narmal",@"title":@"下载",@"opType":@(ExtensionOPDownLoad)}]];
  165. }
  166. extensionView.extensionOpBlock = ^(ExtensionOP extensionOP, CSFileFrameModel *csFileFrameModel){
  167. switch (extensionOP) {
  168. case ExtensionOPDelete:
  169. [weakSelf fileDeletesWithFileFrameModels:weakSelf.muilterOpFilesArray];
  170. break;
  171. case ExtensionOPEdit:
  172. //yidong 文件夹;
  173. [weakSelf moveCSFilesWithFileModels:weakSelf.muilterOpFilesArray];
  174. break;
  175. case ExtensionOPShare:
  176. //分享 文件夹;
  177. [weakSelf shareFilesToUserOrGroups:weakSelf.muilterOpFilesArray];
  178. break;
  179. case ExtensionOPDownLoad:
  180. //2017-07-17 待对多文件夹选择进行合并请求
  181. [weakSelf downloadFileWithFileModels:weakSelf.muilterOpFilesArray];
  182. [Utils showSuccess:@"已加入下载队列" toView:weakView finish:nil];
  183. break;
  184. default:
  185. break;
  186. }
  187. };
  188. extensionView.disable = YES;
  189. extensionView.frame = CGRectMake(0, self.view.frame.size.height - FileExtensionViewH, SCREEN_WIDTH, FileExtensionViewH);
  190. [self.view addSubview:extensionView];
  191. self.csFilesExensionView = extensionView;
  192. }else{
  193. [self.csFilesExensionView removeFromSuperview];
  194. self.csFilesExensionView = nil;
  195. }
  196. //调整tableview.frame
  197. 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));
  198. }
  199. - (void)classFile
  200. {
  201. __weak typeof(self)weakself = self;
  202. if (!self.csFileTypeClassView) {
  203. CSFileTypeClassView *csFileTypeClassView = [[CSFileTypeClassView alloc]init];
  204. csFileTypeClassView.utilityOperateBlock = ^(CSFileType csFileType){
  205. [weakself classFileWithFileType:csFileType];
  206. //hidden
  207. [weakself classFile];
  208. };
  209. [self.view addSubview:csFileTypeClassView];
  210. csFileTypeClassView.frame = CGRectMake(0, 0, self.view.frame.size.width, CSFileTypeClassViewH);
  211. self.csFileTypeClassView = csFileTypeClassView;
  212. }else{
  213. [self.csFileTypeClassView removeFromSuperview];
  214. self.csFileTypeClassView = nil;
  215. }
  216. }
  217. - (void)initSubViews
  218. {
  219. CloudStorageTableView *mainTableView = [[CloudStorageTableView alloc]initWithFrame:CGRectMake(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT - NavBarHeight - STATUSBAR_HEIGHT - TabBarHeight) style:UITableViewStylePlain] ;
  220. mainTableView.separatorStyle = UITableViewCellSeparatorStyleNone;
  221. mainTableView.delegate = self;
  222. mainTableView.dataSource = self;
  223. mainTableView.tableFooterView = [[UIView alloc]init];
  224. mainTableView.tableFooterView.backgroundColor = [UIColor clearColor];
  225. [self.view addSubview:mainTableView];
  226. self.mainTableView = mainTableView;
  227. if (self.csFileSourceType == CSFileSourceTypeSelf) {
  228. __weak typeof(self)weakSelf = self;
  229. CloudStorageBar *cloudStorageBar = [CloudStorageBar new];
  230. cloudStorageBar.delegate = self;
  231. cloudStorageBar.barSortBlock = ^(SortType sortType){
  232. [weakSelf sortFilesWithSortType:sortType];
  233. };
  234. cloudStorageBar.barNewFolderBlock = ^(){
  235. [weakSelf createNewFileFolder];
  236. };
  237. cloudStorageBar.frame = CGRectMake(0, 0, self.view.frame.size.width, CloudStorageBarHeight);
  238. mainTableView.tableHeaderView = cloudStorageBar;
  239. __weak typeof(cloudStorageBar)weakCSBar = cloudStorageBar;
  240. mainTableView.gestureResponseBlock = ^(){
  241. //退出搜索
  242. [weakCSBar giveUpSearch];
  243. //退出筛选
  244. if (weakSelf.csFileTypeClassView) {
  245. [weakSelf classFile];
  246. }
  247. };
  248. }
  249. }
  250. #pragma mark --
  251. #pragma mark -- tableViewDatasource
  252. - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
  253. {
  254. return 1;
  255. }
  256. - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
  257. {
  258. return self.fileModelArray.count;
  259. }
  260. - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
  261. {
  262. CSFileCell *csFileCell = nil;
  263. if (self.csFileSourceType == CSFileSourceTypeSelf) {
  264. csFileCell = [CSFileCell fileCellWithTableView:tableView indexPath:indexPath identifier:CSFileCellIdentifier opItems:@[@{@"icon":@"file_down_narmal",@"title":@"下载",@"opType":@(ExtensionOPDownLoad)},@{@"icon":@"file_share_normal",@"title":@"分享",@"opType":@(ExtensionOPShare)},@{@"icon":@"file_delete_normal",@"title":@"删除",@"opType":@(ExtensionOPDelete)},@{@"icon":@"file_down_rename_normal",@"title":@"重命名",@"opType":@(ExtensionOPEdit)}]];
  265. }else
  266. {
  267. csFileCell = [CSFileCell fileCellWithTableView:tableView indexPath:indexPath identifier:CSFileCellIdentifier opItems:@[@{@"icon":@"file_down_narmal",@"title":@"下载",@"opType":@(ExtensionOPDownLoad)}]];
  268. }
  269. csFileCell.allowsMultipleSelection = tableView.allowsMultipleSelection;
  270. csFileCell.csFileFrameModel = self.fileModelArray[indexPath.row];
  271. csFileCell.indexPath = indexPath;
  272. __weak typeof(self.mainTableView)weakTableView = self.mainTableView;
  273. __weak typeof(self.view)weakView = self.view;
  274. __weak typeof(self)weakself = self;
  275. csFileCell.extensionSwitchBlock = ^(CSFileFrameModel *csFileFrameModel){
  276. NSInteger index = [weakself.fileModelArray indexOfObject:csFileFrameModel];
  277. NSIndexPath *indexPath = [NSIndexPath indexPathForRow:index inSection:0];
  278. csFileFrameModel.isFileExtensionOP = !csFileFrameModel.isFileExtensionOP;
  279. [weakTableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationNone];
  280. [weakTableView scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionNone animated:YES];
  281. };
  282. csFileCell.extensionOpBlock = ^(ExtensionOP extensionOP, CSFileFrameModel *csFileFrameModel){
  283. switch (extensionOP) {
  284. case ExtensionOPDelete:
  285. [weakself fileDeletesWithFileFrameModels:@[csFileFrameModel]];
  286. break;
  287. case ExtensionOPEdit:
  288. [weakself renameFilesWithFileFrameModel:csFileFrameModel indexPath:indexPath];
  289. break;
  290. case ExtensionOPShare:
  291. //yidong 文件夹;
  292. [weakself shareFilesToUserOrGroups:@[csFileFrameModel]];
  293. break;
  294. case ExtensionOPDownLoad:
  295. //download 文件;
  296. [weakself downloadFileWithFileModels:@[csFileFrameModel]];
  297. [Utils showSuccess:@"已加入下载队列" toView:weakView finish:nil];
  298. break;
  299. default:
  300. break;
  301. }
  302. };
  303. return csFileCell;
  304. }
  305. - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
  306. {
  307. CSFileFrameModel *csFileFrameModel = self.fileModelArray[indexPath.row];
  308. return csFileFrameModel.cellHeight;
  309. }
  310. #pragma mark --
  311. #pragma mark -- tableViewDelegate
  312. - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
  313. {
  314. [tableView deselectRowAtIndexPath:indexPath animated:YES];
  315. CSFileFrameModel *csFileFrameModel = self.fileModelArray[indexPath.row];
  316. if (tableView.allowsMultipleSelection) {
  317. csFileFrameModel.isSelected = !csFileFrameModel.isSelected;
  318. if (csFileFrameModel.isSelected) {
  319. [self.muilterOpFilesArray addObject:csFileFrameModel];
  320. }else [self.muilterOpFilesArray removeObject:csFileFrameModel];
  321. if (self.muilterOpFilesArray.count) {
  322. self.csFilesExensionView.disable = NO;
  323. }else self.csFilesExensionView.disable = YES;
  324. [tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationNone];
  325. }else{
  326. //
  327. CSFileModel *csFileModel = csFileFrameModel.fileModel;
  328. if (csFileModel.isdir) {
  329. //文件夹
  330. CSFirstPageController *csPage = [CSFirstPageController new];
  331. csPage.title = csFileModel.name;
  332. csPage.pid = csFileModel.sid;
  333. csPage.csFileSourceType = self.csFileSourceType;
  334. csPage.father_csFileModel = csFileModel;
  335. // __block CGRect origionFrame = CGRectMake(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT - STATUSBAR_HEIGHT - NavBarHeight);
  336. //
  337. // [self.navigationController setNavigationBarHidden:NO animated:NO];
  338. //
  339. // self.mainTableView.frame = origionFrame;
  340. [self.navigationController pushViewController:csPage animated:YES];
  341. }
  342. }
  343. }
  344. #pragma mark --
  345. #pragma mark -- CSBarDelegate
  346. - (void)searchBarStartSearch:(UISearchBar *)searchBar withSearchContent:(NSString *)searchContent
  347. {
  348. [self searchFilesWithContent:searchContent];
  349. }
  350. - (void)searchBarPrepareToSearch
  351. {
  352. self.searchModel = YES;
  353. [self.mainTableView reloadData];
  354. CGPoint point = CGPointMake(0, STATUSBAR_HEIGHT);
  355. __block CGRect adjusetedFrame = CGRectMake(point.x, point.y, SCREEN_WIDTH, SCREEN_HEIGHT - NavBarHeight - TabBarHeight + STATUSBAR_HEIGHT);
  356. [self.navigationController setNavigationBarHidden:YES animated:YES];
  357. [[UIApplication sharedApplication]setStatusBarStyle:UIStatusBarStyleDefault animated:YES];
  358. self.mainTableView.frame = adjusetedFrame;
  359. }
  360. - (void)searchBarCancerSearch
  361. {
  362. self.searchModel = NO;
  363. [self.mainTableView reloadData];
  364. __block CGRect origionFrame = CGRectMake(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT - STATUSBAR_HEIGHT - NavBarHeight - TabBarHeight);
  365. [self.navigationController setNavigationBarHidden:NO animated:YES];
  366. self.mainTableView.frame = origionFrame;
  367. }
  368. #pragma mark --
  369. #pragma mark -- fileOp汇总
  370. - (void)fileDeletesWithFileFrameModels:(NSArray *)fileFrameModels
  371. {
  372. NSMutableArray *fileIds = [NSMutableArray array];
  373. NSMutableArray *indexArray = [NSMutableArray array];
  374. for (CSFileFrameModel *csFileFrameModel in fileFrameModels) {
  375. [fileIds addObject:csFileFrameModel.fileModel.sid];
  376. NSInteger index = [self.fileModelArray indexOfObject:csFileFrameModel];
  377. NSIndexPath *indexPath = [NSIndexPath indexPathForRow:index inSection:0];
  378. [indexArray addObject:indexPath];
  379. }
  380. UIActionSheet *sheet = [UIActionSheet actionSheetWithTitle:@"请选择删除方式" cancelButtonTitle:@"取消" destructiveButtonTitle:nil otherButtonTitles:@[@"彻底删除",@"移到垃圾桶"] completionBlock:^(UIActionSheet *actionSheet, NSInteger selectedButtonIndex) {
  381. [Utils showWaitingToView:self.mainTableView];
  382. __weak typeof(self.mainTableView)weakTableView = self.mainTableView;
  383. __weak typeof(self.csFilesExensionView)weakExtensionView = self.csFilesExensionView;
  384. __weak typeof(self)weakself = self;
  385. [[HttpRequest sharedManager]cloudStorageFileDeleteWithItemIDs:fileIds deleteLevel:selectedButtonIndex complete:^(BOOL success, id data, NSError *error) {
  386. [Utils HiddenWaitingToView:weakTableView];
  387. if (success && data) {
  388. [Utils showSuccess:@"删除成功" toView:weakTableView finish:nil];
  389. [weakself.fileModelArray removeObjectsInArray:fileFrameModels];//删除数据源 内对于的对象
  390. [weakTableView deleteRowsAtIndexPaths:indexArray withRowAnimation:UITableViewRowAnimationBottom];
  391. weakExtensionView.disable = YES;
  392. //[weakTableView beginUpdates];
  393. }else{
  394. [Utils showError:@"删除失败" ToView:weakTableView];
  395. }
  396. }];
  397. } cancelBlock:^{
  398. }];
  399. [sheet showInView:self.mainTableView];
  400. }
  401. - (void)getTopFilesLists
  402. {
  403. [self getFileListWithPid:self.pid searchKey:nil classExt:nil];
  404. }
  405. - (void)getAllShareFiles
  406. {
  407. __weak typeof(self)weakself = self;
  408. __weak typeof(self.mainTableView)weakTableView = self.mainTableView;
  409. [[HttpRequest sharedManager]cloudStorageGetShareFiles:self.shareID complete:^(BOOL success, id data, NSError *error) {
  410. if (success && data) {
  411. NSArray *fileDataModel = [CSFileModel mj_objectArrayWithKeyValuesArray:data[@"data"]];
  412. for (CSFileModel *fileModel in fileDataModel) {
  413. if (fileModel.isdir) {
  414. fileModel.serverFullPath = self.father_csFileModel?[NSString stringWithFormat:@"%@%@/",self.father_csFileModel.serverFullPath,fileModel.name]:[NSString stringWithFormat:@"%@/",fileModel.name];
  415. }else fileModel.serverFullPath = self.father_csFileModel?[NSString stringWithFormat:@"%@%@",self.father_csFileModel.serverFullPath,fileModel.name]:[NSString stringWithFormat:@"%@",fileModel.name];;
  416. //不存储.
  417. // [CloudStorageDB addcsFiletoDB:fileModel];
  418. CSFileFrameModel *csFileFrameModel = [[CSFileFrameModel alloc]initWithFileModel:fileModel];
  419. [weakself.fileModelArray addObject:csFileFrameModel];
  420. }
  421. [weakTableView reloadData];
  422. }
  423. }];
  424. }
  425. - (void)renameFilesWithFileFrameModel:(CSFileFrameModel *)fileFrameModel indexPath:(NSIndexPath *)indexPath
  426. {
  427. __weak typeof(self)weakSelf = self;
  428. __weak typeof(self.mainTableView)weakTableView = self.mainTableView;
  429. UIAlertViewStyle type = UIAlertViewStylePlainTextInput;
  430. //new name
  431. [UIAlertView showAlertViewWithType:type Title:@"重命名" message:nil cancelButtonTitle:@"取消" otherButtonTitles:@[@"确定"] onDismiss:^(int buttonIndex, UIAlertView *alertView) {
  432. UITextField *applyTextField = [alertView textFieldAtIndex:0];
  433. if (!applyTextField.text) {
  434. [Utils showError:@"请输入新命名" ToView:weakTableView];
  435. return ;
  436. }
  437. [Utils showWaitingToView:weakTableView];
  438. [[HttpRequest sharedManager]cloudStorageFileReNameWithNewName:applyTextField.text fileID:fileFrameModel.fileModel.sid complete:^(BOOL success, id data, NSError *error) {
  439. [Utils HiddenWaitingToView:weakTableView];
  440. if (success && data) {
  441. [Utils showSuccess:@"重命名成功" toView:weakTableView finish:nil];
  442. //reload.
  443. //重新计算尺寸.
  444. CSFileFrameModel *newfileFrameModel = weakSelf.fileModelArray[indexPath.row];
  445. newfileFrameModel.fileModel.name = applyTextField.text;
  446. [newfileFrameModel renameItemWithNewFileModel:newfileFrameModel.fileModel];
  447. if (indexPath) {
  448. [weakTableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationNone];
  449. }
  450. }else{
  451. [Utils showError:@"重命名失败" ToView:weakTableView];
  452. }
  453. }];
  454. } onCancel:^(UIAlertView *alertView) {
  455. }];
  456. }
  457. - (void)createNewFileFolder{
  458. CSAlertView * alertview = [[CSAlertView alloc]initWithTitle:@"新建文件夹" message:@"" inputMode:YES sureBtn:@"创建" cancleBtn:@"取消"];
  459. __weak typeof(self)weakSelf = self;
  460. __weak typeof(alertview)weakalertview = alertview;
  461. __weak typeof(self.mainTableView)weakTableView = self.mainTableView;
  462. [alertview showXBAlertView];
  463. alertview.alertresult = ^(NSString *folderName){
  464. [[HttpRequest sharedManager]cloudStorageCreateNewFileFolderWithFolderName:folderName pid:weakSelf.pid delflag:@"0" complete:^(BOOL success, id data, NSError *error) {
  465. if (success && data) {
  466. [weakalertview stopActityAndRemoveAlertView];
  467. [Utils showSuccess:@"文件夹创建成功" toView:weakTableView finish:nil];
  468. //reload.
  469. CSFileModel *csfileModel = [CSFileModel mj_objectWithKeyValues:data[@"data"]];
  470. csfileModel.serverFullPath = self.father_csFileModel?[NSString stringWithFormat:@"%@%@/",self.father_csFileModel.serverFullPath,csfileModel.name]:[NSString stringWithFormat:@"%@/",csfileModel.name];
  471. [kCloudStorageDB addcsFiletoDB:csfileModel];
  472. CSFileFrameModel *csframeModel = [[CSFileFrameModel alloc]initWithFileModel:csfileModel];
  473. [weakSelf.fileModelArray addObject:csframeModel];
  474. [weakTableView reloadData];
  475. // [weakTableView insertRowsAtIndexPaths:@[[NSIndexPath indexPathForRow:[weakTableView numberOfRowsInSection:0] - 1 inSection:0]] withRowAnimation:UITableViewRowAnimationNone];
  476. //
  477. [weakTableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:weakSelf.fileModelArray.count - 1 inSection:0] atScrollPosition:UITableViewScrollPositionBottom animated:YES];
  478. }else{
  479. [weakalertview showErrorMsg:@"文件夹创建失败"];
  480. 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}];
  481. [Bugly reportError:createFolderError];
  482. }
  483. //[weakalertview stopActity];
  484. }];
  485. };
  486. // CustomAlertView *alertView =
  487. // alertVc.messageColor = [UIColor redColor];
  488. // [alertVc alertViewControllerWithMessage:@"测试而已" andBlock:^{
  489. // NSLog(@"test");
  490. // }];
  491. // [self.navigationController presentViewController:alertVc animated:NO completion:nil];
  492. //presentModalViewController:alertVc animated:YES];
  493. /*UIAlertViewStyle type = UIAlertViewStylePlainTextInput;
  494. __weak typeof(self)weakSelf = self;
  495. __weak typeof(self.mainTableView)weakTableView = self.mainTableView;
  496. //待使用新的createNEWFOLDERVIEW
  497. [UIAlertView showAlertViewWithType:type Title:@"新建文件夹" message:nil cancelButtonTitle:@"取消" otherButtonTitles:@[@"确定"] onDismiss:^(int buttonIndex, UIAlertView *alertView) {
  498. UITextField *applyTextField = [alertView textFieldAtIndex:0];
  499. if (!applyTextField.text.length) {
  500. [Utils showError:@"请输入文件夹名称" ToView:weakTableView];
  501. return ;
  502. }
  503. [Utils showWaitingToView:weakTableView];
  504. #warning 2016-06-20 貌似有连续请求的问题..
  505. [[HttpRequest sharedManager]cloudStorageCreateNewFileFolderWithFolderName:applyTextField.text pid:weakSelf.pid delflag:@"0" complete:^(BOOL success, id data, NSError *error) {
  506. [Utils HiddenWaitingToView:weakTableView];
  507. if (success && data) {
  508. //
  509. [Utils showSuccess:@"文件夹创建成功" toView:weakTableView finish:nil];
  510. //reload.
  511. CSFileModel *csfileModel = [CSFileModel mj_objectWithKeyValues:data[@"data"]];
  512. csfileModel.serverFullPath = self.father_csFileModel?[NSString stringWithFormat:@"%@%@/",self.father_csFileModel.serverFullPath,csfileModel.name]:[NSString stringWithFormat:@"%@/",csfileModel.name];
  513. [CloudStorageDB addcsFiletoDB:csfileModel];
  514. CSFileFrameModel *csframeModel = [[CSFileFrameModel alloc]initWithFileModel:csfileModel];
  515. [weakSelf.fileModelArray addObject:csframeModel];
  516. [weakTableView reloadData];
  517. // [weakTableView insertRowsAtIndexPaths:@[[NSIndexPath indexPathForRow:[weakTableView numberOfRowsInSection:0] - 1 inSection:0]] withRowAnimation:UITableViewRowAnimationNone];
  518. //
  519. [weakTableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:weakSelf.fileModelArray.count - 1 inSection:0] atScrollPosition:UITableViewScrollPositionBottom animated:YES];
  520. }else{
  521. [Utils showError:@"文件夹创建失败" ToView:weakTableView];
  522. }
  523. }];
  524. } onCancel:^(UIAlertView *alertView) {
  525. }];
  526. */}
  527. - (void)sortFilesWithSortType:(SortType)sortType
  528. {
  529. NSComparator cmptr = nil;
  530. //本地排序
  531. if (sortType == SortTypeFileName) {
  532. cmptr = ^(CSFileFrameModel *frameModelA, CSFileFrameModel *frameModelB){
  533. if (frameModelA.fileModel.name > frameModelB.fileModel.name) {
  534. return (NSComparisonResult)NSOrderedDescending;
  535. }
  536. if (frameModelA.fileModel.name < frameModelB.fileModel.name) {
  537. return (NSComparisonResult)NSOrderedAscending;
  538. }
  539. return (NSComparisonResult)NSOrderedSame;
  540. };
  541. }else if(sortType == SortTypeFileTime){
  542. cmptr = ^(CSFileFrameModel *frameModelA, CSFileFrameModel *frameModelB){
  543. if (frameModelA.fileModel.server_ctime > frameModelB.fileModel.server_ctime) {
  544. return (NSComparisonResult)NSOrderedDescending;
  545. }
  546. if (frameModelA.fileModel.server_ctime < frameModelB.fileModel.server_ctime) {
  547. return (NSComparisonResult)NSOrderedAscending;
  548. }
  549. return (NSComparisonResult)NSOrderedSame;
  550. };
  551. }
  552. NSArray *newSortArray = [self.fileModelArray sortedArrayUsingComparator:cmptr];
  553. [self.fileModelArray removeAllObjects];
  554. [self.fileModelArray addObjectsFromArray:newSortArray];
  555. [self.mainTableView reloadData];
  556. }
  557. //丢给filetype choose.
  558. - (void)classFileWithFileType:(CSFileType)fileType
  559. {
  560. if (!self.searchModel) {
  561. //全目录分类,quanbu 时是否不动..
  562. NSString *classExtNumStr = nil;
  563. if (fileType != CSFileTypeAll) {
  564. classExtNumStr = [NSString stringWithFormat:@"%d",fileType];
  565. }
  566. [self getFileListWithPid:nil searchKey:nil classExt:classExtNumStr];
  567. }else{
  568. //本地搜索结果分类
  569. }
  570. }
  571. - (void)searchFilesWithContent:(NSString *)content
  572. {
  573. self.searchModel = YES;
  574. [self getFileListWithPid:nil searchKey:content classExt:nil];
  575. }
  576. - (void)shareFilesToUserOrGroups:(NSArray *)fileModels
  577. {
  578. #warning 2016-06-20待新增云盘文件消息体.,转发中心待调整.
  579. // //取出fileModels(FrameModels)中的entity
  580. // NSMutableArray *tmparr = [NSMutableArray array];
  581. // [fileModels enumerateObjectsUsingBlock:^(CSFileFrameModel *obj, NSUInteger idx, BOOL * _Nonnull stop) {
  582. // [tmparr addObject:obj.fileModel];
  583. // }];
  584. // NewMessageTransController *tanrsController = [NewMessageTransController new];
  585. // tanrsController.csfilesArray = tmparr;
  586. // tanrsController.isDisableMulitselect = YES;
  587. // IWNavigationController *navCor = [[IWNavigationController alloc]initWithRootViewController:tanrsController];
  588. //
  589. // [self.navigationController presentViewController:navCor animated:YES completion:nil];
  590. }
  591. - (void)moveCSFilesWithFileModels:(NSArray *)csfileModels
  592. {
  593. NSMutableArray *csFileIDsArray = [NSMutableArray array];
  594. for (CSFileFrameModel *csfileFrameModel in csfileModels) {
  595. [csFileIDsArray addObject:csfileFrameModel.fileModel.sid];
  596. }
  597. CSRouterSelectController *csRouterSelectController = [CSRouterSelectController new];
  598. IWNavigationController *navCloud = [[IWNavigationController alloc]initWithRootViewController:csRouterSelectController];
  599. __weak typeof(self.view)weakView = self.view;
  600. #pragma mark -- 2017-07-26 01文件迁移 serverFullPath未处理 --sql
  601. navCloud.cloudControlerBlock = ^(NSString *pid, NSString *serverFullPath){
  602. [[HttpRequest sharedManager]cloudStorageMoveFilesToOtherPid:pid needMoveFiles:csFileIDsArray complete:^(BOOL success, id data, NSError *error) {
  603. #warning 2017-07-26 02 文件迁移完成后控制器刷新 未实现
  604. //update new files.
  605. //[[CloudStorageDB shareInstance]addcsFilestoDB:csFileIDsArray];
  606. if (!error&&success) {
  607. [kCloudStorageDB updateCSFilestoDB:csFileIDsArray targetid:pid];
  608. [Utils showSuccess:@"移动成功" toView:weakView finish:nil];
  609. }
  610. else{
  611. [Utils showSuccess:@"移动失败" toView:weakView finish:nil];
  612. }
  613. }];
  614. };
  615. [self.navigationController presentViewController:navCloud animated:YES completion:nil];
  616. }
  617. - (void)downloadFileWithFileModels:(NSArray *)csfileModels
  618. {
  619. //获取最外层文件夹.
  620. //再创建数据库模型,不用考虑重复,uuid相同无法添加
  621. //全部丢给tarncenter,相同的uuid会自动过滤.
  622. //最后.通知tarns.(如果是文件,带上subfiles.)
  623. //先获取所有文件.0
  624. NSMutableArray *tempSidsArrray = [NSMutableArray array];
  625. //need downfiles0
  626. NSMutableArray *totalNeedDownloadFileArray = [NSMutableArray array];
  627. //trans show 0
  628. NSMutableArray *totalPidZeroDownloadFilesArray = [NSMutableArray array];//缺少返回allsubfiles.
  629. //save db for all files.csdownfile *
  630. NSMutableArray *totalDBSaveDownloadFilesArray = [NSMutableArray array];
  631. for (CSFileFrameModel *csFileFrameModel in csfileModels) {
  632. if (csFileFrameModel.fileModel.isdir) {
  633. [tempSidsArrray addObject:csFileFrameModel.fileModel.sid];
  634. }
  635. //创建downupmodel
  636. csFileFrameModel.fileModel.pid = @"0";
  637. 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];
  638. [totalPidZeroDownloadFilesArray addObject:newCSFileDownUpModel];//need show to transcontroller - done
  639. [totalDBSaveDownloadFilesArray addObject:newCSFileDownUpModel]; //need save file/filefolder model
  640. if (!newCSFileDownUpModel.isdir) {
  641. [totalNeedDownloadFileArray addObject:newCSFileDownUpModel];//need download file
  642. }
  643. }
  644. [self getAllFileFoldersFilesWithPidsArray:tempSidsArrray resultBlock:^(NSArray *fileModels) {
  645. for (CSFileModel *fileModel in fileModels) {
  646. //创建downupmodel
  647. 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];
  648. [totalDBSaveDownloadFilesArray addObject:newCSFileDownUpModel];
  649. if (!fileModel.isdir) {
  650. [totalNeedDownloadFileArray addObject:newCSFileDownUpModel];
  651. }
  652. }
  653. NSMutableArray *tempUUIDsArray = [NSMutableArray array];
  654. for (CSFileDownUpModel *csFileDownUpModel in totalDBSaveDownloadFilesArray) {
  655. [tempUUIDsArray addObject:[NSString stringWithFormat:@"'%@'",csFileDownUpModel.downUpUUID]];
  656. }
  657. //过滤数据库中成功的文件.
  658. if (tempUUIDsArray.count) {
  659. [kCloudStorageDB getCSDownUpFilesWithUUIDs:tempUUIDsArray downUpModel:DownUpModelDown resultBlock:^(NSArray *dbCSFileModels) {
  660. //过滤掉成功的.
  661. NSArray *successFiles = [dbCSFileModels filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"downUpStatus = %d",DownUpStatusSuccess]];
  662. NSMutableArray *tempSuccessFilesSortArray = [NSMutableArray array];
  663. for (CSFileDownUpModel *sortFileDownUpModel in totalDBSaveDownloadFilesArray) {
  664. //if total的在返回的成功列表内能找到,则移除
  665. if ([successFiles filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"downUpUUID = %@",sortFileDownUpModel.downUpUUID]].count) {
  666. [tempSuccessFilesSortArray addObject:sortFileDownUpModel];
  667. }
  668. }
  669. [totalNeedDownloadFileArray removeObjectsInArray:tempSuccessFilesSortArray];
  670. if (totalNeedDownloadFileArray.count) {
  671. [kCloudStorageDB addCSDownUpFilesToDB:totalDBSaveDownloadFilesArray downUpModel:DownUpModelDown];
  672. CSTabBarController *iwNav = (CSTabBarController *)self.tabBarController;
  673. if (iwNav.cloudControlerFileDownloadBlock) {
  674. iwNav.cloudControlerFileDownloadBlock(totalPidZeroDownloadFilesArray);
  675. }
  676. //downUpFiles
  677. //待过滤successfiles
  678. [[CloudStorageDownloadCenter sharedInstance]addOneDownloadWithFileDownUpModels:totalNeedDownloadFileArray];
  679. }
  680. }];
  681. }
  682. }];
  683. }
  684. - (void)getAllFileFoldersFilesWithPidsArray:(NSArray *)pidsArray resultBlock:(void(^)(NSArray *fileModels))resultBlock
  685. {
  686. if (pidsArray) {
  687. [[HttpRequest sharedManager]cloudStorageGetAllChildsWithPids:pidsArray complete:^(BOOL success, id data, NSError *error) {
  688. if (data && success) {
  689. NSArray *fileModels = [CSFileModel mj_objectArrayWithKeyValuesArray:data[@"data"]];
  690. resultBlock(fileModels);
  691. //resultBlock();
  692. }else resultBlock(nil);
  693. }];
  694. }else resultBlock(nil);
  695. }
  696. - (void)getFileListWithPid:(NSString *)pid searchKey:(NSString *)key classExt:(NSString *)ext
  697. {
  698. [self.fileModelArray removeAllObjects];
  699. __weak typeof(self)weakSelf = self;
  700. __weak typeof(self.mainTableView)weakTableView = self.mainTableView;
  701. __weak typeof(self.view)weakView = self.view;
  702. [Utils showWaitingToView:self.view];
  703. [[HttpRequest sharedManager]cloudStorageGetFilesWithPid:pid searchKey:key ext:ext complete:^(BOOL success, id data, NSError *error) {
  704. if (success && data) {
  705. NSArray *fileDataModel = [CSFileModel mj_objectArrayWithKeyValuesArray:data[@"data"]];
  706. for (CSFileModel *fileModel in fileDataModel) {
  707. if (fileModel.isdir) {
  708. fileModel.serverFullPath = self.father_csFileModel?[NSString stringWithFormat:@"%@%@/",self.father_csFileModel.serverFullPath,fileModel.name]:[NSString stringWithFormat:@"%@/",fileModel.name];
  709. }else fileModel.serverFullPath = self.father_csFileModel?[NSString stringWithFormat:@"%@%@",self.father_csFileModel.serverFullPath,fileModel.name]:[NSString stringWithFormat:@"%@",fileModel.name];;
  710. CSFileFrameModel *csFileFrameModel = [[CSFileFrameModel alloc]initWithFileModel:fileModel];
  711. [weakSelf.fileModelArray addObject:csFileFrameModel];
  712. }
  713. [Utils HiddenWaitingToView:weakView];
  714. [weakTableView reloadData];
  715. if (weakSelf.csFileSourceType == CSFileSourceTypeSelf) {
  716. dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
  717. [kCloudStorageDB addcsFilestoDB:fileDataModel];
  718. });
  719. }
  720. }else{
  721. [Utils HiddenWaitingToView:weakView];
  722. [kCloudStorageDB getAllCloudFilesWithPid:pid resultBlock:^(NSArray *result) {
  723. for (CSFileModel *fileModel in result) {
  724. CSFileFrameModel *csFileFrameModel = [[CSFileFrameModel alloc]initWithFileModel:fileModel];
  725. [weakSelf.fileModelArray addObject:csFileFrameModel];
  726. }
  727. [weakTableView reloadData];
  728. }];
  729. }
  730. }];
  731. }
  732. - (void)dealloc
  733. {
  734. NSLog(@"firstpage delloc");
  735. }
  736. @end