CSFirstPageController.m 40 KB

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