nasLastFileViewController.m 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550
  1. //
  2. // nasLastFileViewController.m
  3. // 双子星云手机
  4. //
  5. // Created by xd h on 2024/7/9.
  6. //
  7. #import "nasLastFileViewController.h"
  8. #import "lastFileTableViewCell.h"
  9. #import "editTypeHeadView.h"
  10. #import "editTypeBottomView.h"
  11. #import "downloadManager.h"
  12. #import "uploadFileRecordViewController.h"
  13. #import "queryShareModel.h"
  14. #import "audioPlayerViewController.h"
  15. #import "videoPlayByAVPlayerViewController.h"
  16. #import "imageDetailsScrollViewController.h"
  17. #import "editShareView.h"
  18. #import "ComontAlretDeleteTypeViewController.h"
  19. @interface nasLastFileViewController ()<UITableViewDelegate,UITableViewDataSource,DZNEmptyDataSetSource, DZNEmptyDataSetDelegate>
  20. {
  21. BOOL canShareType;
  22. }
  23. @property(nonatomic,strong) UITableView*tableView;
  24. @property (nonatomic,strong) NSMutableArray *lastFileDataArr;
  25. @property(nonatomic,assign) BOOL isEditType;
  26. @property(nonatomic,strong) editTypeHeadView*curEditTypeHeadView;
  27. @property(nonatomic,strong) editTypeBottomView*curEditTypeBottomView;
  28. @property (nonatomic, strong) NSMutableArray*didSelectListArr;//选中的数据
  29. @end
  30. @implementation nasLastFileViewController
  31. - (void)viewDidLoad {
  32. [super viewDidLoad];
  33. // Do any additional setup after loading the view.
  34. [self.toolBar setHidden:YES];
  35. [self.navigationBar setHidden:YES];
  36. [self.navBarBGView setHidden:NO];
  37. self.navBarBGView.backgroundColor = [UIColor whiteColor];
  38. //[self.view setBackgroundColor:[UIColor hwColor:@"#F6F8FA"]];
  39. [self.view setBackgroundColor:[UIColor whiteColor]];
  40. self.titleLabel.text = NSLocalizedString(@"NAS_last_file",nil);
  41. [self drawAnyView];
  42. _didSelectListArr = [NSMutableArray new];
  43. //数据埋点
  44. [[netWorkManager shareInstance] DataEmbeddingPointBy:2 withEventValue:@"Recently"];
  45. }
  46. - (void)drawAnyView{
  47. [self.view addSubview:self.tableView];
  48. [self.tableView mas_makeConstraints:^(MASConstraintMaker *make) {
  49. make.left.mas_equalTo(0);
  50. make.right.mas_equalTo(0);
  51. //make.bottom.mas_equalTo(-(safeArea));
  52. make.bottom.mas_equalTo(0);
  53. make.top.equalTo(self.navBarBGView.mas_bottom).offset(10.f);
  54. }];
  55. _curEditTypeHeadView = [[editTypeHeadView alloc] init];
  56. _curEditTypeHeadView.hidden = YES;
  57. [self.navBarBGView addSubview:_curEditTypeHeadView];
  58. [_curEditTypeHeadView mas_makeConstraints:^(MASConstraintMaker *make) {
  59. make.left.mas_equalTo(0);
  60. make.right.mas_equalTo(0);
  61. make.bottom.mas_equalTo(0);
  62. make.height.mas_equalTo(NAVIHEIGHT - AdaptNaviHeight);
  63. }];
  64. #pragma mark 编辑状态的 取消 和全选按钮 响应事件
  65. KWeakSelf
  66. _curEditTypeHeadView.didClickButtonFun = ^(NSInteger tag) {
  67. if(tag==1){
  68. [weakSelf userCancelEditTypeFun];
  69. }
  70. };
  71. _curEditTypeHeadView.didClickSelectAllFun = ^(UIButton * _Nonnull but) {
  72. [weakSelf didClickSelectAllButton:but];
  73. };
  74. _curEditTypeBottomView = [[editTypeBottomView alloc] init];
  75. _curEditTypeBottomView.hidden = YES;
  76. [self.view addSubview:_curEditTypeBottomView];
  77. [_curEditTypeBottomView mas_makeConstraints:^(MASConstraintMaker *make) {
  78. make.left.mas_equalTo(0);
  79. make.right.mas_equalTo(0);
  80. make.bottom.mas_equalTo(0);
  81. make.height.mas_equalTo(60 + AdaptTabHeight);
  82. }];
  83. #pragma mark 编辑状态的 下载 分享 删除 响应事件
  84. _curEditTypeBottomView.didClickButtonFun = ^(NSInteger tag) {
  85. if(tag==1){
  86. [weakSelf gotoDownLoadFileFun];
  87. }
  88. else if(tag==2){
  89. [weakSelf gotoShareViewFun];
  90. }
  91. else if(tag==3){
  92. [weakSelf showDeleteAlearViewFun];
  93. }
  94. };
  95. [self.view addSubview:self.tableView];
  96. [self.tableView mas_makeConstraints:^(MASConstraintMaker *make) {
  97. make.left.mas_equalTo(0);
  98. make.right.mas_equalTo(0);
  99. //make.bottom.mas_equalTo(-(safeArea));
  100. make.bottom.mas_equalTo(0);
  101. make.top.equalTo(self.navBarBGView.mas_bottom).offset(10.f);
  102. }];
  103. }
  104. #pragma mark - 懒加载
  105. - (UITableView *)tableView{
  106. if (!_tableView) {
  107. _tableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, 0, 0) style:UITableViewStylePlain];
  108. _tableView.delegate = self;
  109. _tableView.dataSource = self;
  110. _tableView.showsVerticalScrollIndicator = NO;
  111. _tableView.showsHorizontalScrollIndicator = NO;
  112. // _tableView.contentInset = UIEdgeInsetsMake(-H_STATE_BAR, 0, 0, 0);
  113. [_tableView setSeparatorStyle:(UITableViewCellSeparatorStyleNone)];
  114. [_tableView setSeparatorColor:[UIColor clearColor]];
  115. [_tableView setBackgroundColor:[UIColor clearColor]];
  116. [_tableView setTableFooterView:[UIView new]];
  117. [_tableView setBounces:YES];
  118. if (@available(iOS 15.0, *)) {
  119. _tableView.sectionHeaderTopPadding = 0;
  120. }
  121. //空数据引入第三方开源处理
  122. _tableView.emptyDataSetSource = self;
  123. _tableView.emptyDataSetDelegate = self;
  124. }
  125. return _tableView;
  126. }
  127. #pragma mark - 列表委托
  128. - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{
  129. return 1;
  130. }
  131. - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
  132. if(!_lastFileDataArr){
  133. return 0;
  134. }
  135. return _lastFileDataArr.count;
  136. }
  137. - (lastFileTableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
  138. __block NSInteger row = indexPath.row;
  139. static NSString *identifier = @"lastFileTableViewCell";
  140. lastFileTableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:identifier];
  141. cell.selectionStyle = UITableViewCellSelectionStyleNone;
  142. if (!cell){
  143. cell = [[lastFileTableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:identifier];
  144. [cell setSelectionStyle:UITableViewCellSelectionStyleNone];
  145. [cell setBackgroundColor:[UIColor clearColor]];
  146. [cell setAccessoryType:(UITableViewCellAccessoryNone)];
  147. [cell hideCheckButtonBy:NO];
  148. }
  149. if(row < _lastFileDataArr.count){
  150. lastFileModel* dataModel = _lastFileDataArr[row];
  151. cell.curLastFileModel = dataModel;
  152. KWeakSelf
  153. cell.didClickSwitch = ^(BOOL SwitchOn) {
  154. [weakSelf userCheckFilePreviewByRow:row];
  155. };
  156. }
  157. return cell;
  158. }
  159. - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
  160. return 84;
  161. }
  162. - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
  163. {
  164. NSInteger row = indexPath.row;
  165. if(row < _lastFileDataArr.count){
  166. lastFileModel* dataModel = _lastFileDataArr[row];
  167. if([dataModel.type isEqualToString:@"video"]){
  168. videoPlayByAVPlayerViewController *vc = [videoPlayByAVPlayerViewController new];
  169. vc.VideoDataMode = (NASFileAndFolderDataModel*)dataModel;
  170. [self.navigationController pushViewController:vc animated:YES];
  171. KWeakSelf
  172. vc.didNeedToRegetDataFun = ^{
  173. [weakSelf getLastFileDataFun];
  174. };
  175. }
  176. else if([dataModel.type isEqualToString:@"audio"]){
  177. NSMutableArray *audioDataArr = [NSMutableArray new];
  178. NSInteger index = 0;
  179. for (int i=0; i<_lastFileDataArr.count; i++) {
  180. lastFileModel* audioDataModel = _lastFileDataArr[i];
  181. if([dataModel.type isEqualToString:@"audio"]){
  182. if(i == row){
  183. index = audioDataArr.count;
  184. }
  185. [audioDataArr addObject:audioDataModel];
  186. }
  187. }
  188. audioPlayerViewController *vc = [audioPlayerViewController new];
  189. vc.index = index;
  190. vc.audioOutSidedataArray = audioDataArr;
  191. [self.navigationController pushViewController:vc animated:YES];
  192. }
  193. else if([dataModel.type isEqualToString:@"jpg"]){
  194. NSMutableArray *jpgDataArr = [NSMutableArray new];
  195. NSInteger index = 0;
  196. for (int i=0; i<_lastFileDataArr.count; i++) {
  197. lastFileModel* jpgDataModel = _lastFileDataArr[i];
  198. if([dataModel.type isEqualToString:@"jpg"]){
  199. if(i == row){
  200. index = jpgDataArr.count;
  201. }
  202. [jpgDataArr addObject:jpgDataModel];
  203. }
  204. }
  205. imageDetailsScrollViewController *vc = [imageDetailsScrollViewController new];
  206. vc.index = index;
  207. vc.totalDataArr = jpgDataArr;
  208. [self.navigationController pushViewController:vc animated:YES];
  209. vc.canShareType = canShareType;
  210. }
  211. }
  212. }
  213. #pragma mark 空数据
  214. - (UIImage *)imageForEmptyDataSet:(UIScrollView *)scrollView {
  215. NSString *imageName = @"nas_not_data";
  216. return [UIImage imageNamed:imageName];
  217. }
  218. - (NSAttributedString *)titleForEmptyDataSet:(UIScrollView *)scrollView {
  219. NSString *text = NSLocalizedString(@"NAS_last_file_not_data_tip",nil);
  220. NSDictionary *attributes = @{NSFontAttributeName: [UIFont systemFontOfSize:16.0f],
  221. NSForegroundColorAttributeName: HW999999Color};
  222. return [[NSAttributedString alloc] initWithString:text attributes:attributes];
  223. }
  224. //调整图片位置
  225. - (CGFloat)verticalOffsetForEmptyDataSet:(UIScrollView *)scrollView {
  226. return -150;
  227. }
  228. #pragma mark 用户长按图片进入编辑
  229. - (void)setViewEditTypeFun
  230. {
  231. _isEditType = YES;
  232. //[self.tableView reloadData];
  233. _curEditTypeHeadView.hidden = NO;
  234. _curEditTypeBottomView.hidden = NO;
  235. [self.tableView mas_remakeConstraints:^(MASConstraintMaker *make) {
  236. make.left.mas_equalTo(0);
  237. make.right.mas_equalTo(0);
  238. make.bottom.mas_equalTo(_curEditTypeBottomView.mas_top);
  239. make.top.equalTo(self.navBarBGView.mas_bottom).offset(10.f);
  240. }];
  241. }
  242. #pragma mark 用户取消编辑编辑
  243. - (void)userCancelEditTypeFun
  244. {
  245. //数据还原
  246. for (lastFileModel*model in _didSelectListArr) {
  247. model.isSelectType = NO;
  248. }
  249. [_didSelectListArr removeAllObjects];
  250. _isEditType = NO;
  251. [self.tableView reloadData];
  252. _curEditTypeHeadView.hidden = YES;
  253. _curEditTypeBottomView.hidden = YES;
  254. [self.tableView mas_remakeConstraints:^(MASConstraintMaker *make) {
  255. make.left.mas_equalTo(0);
  256. make.right.mas_equalTo(0);
  257. make.bottom.mas_equalTo(0);
  258. make.top.equalTo(self.navBarBGView.mas_bottom).offset(10.f);
  259. }];
  260. }
  261. - (void)userCheckFilePreviewByRow:(NSInteger)row
  262. {
  263. if(row < _lastFileDataArr.count){
  264. lastFileModel* dataModel = _lastFileDataArr[row];
  265. if(dataModel.isSelectType){
  266. [_didSelectListArr removeObject:dataModel];
  267. }
  268. else{
  269. [_didSelectListArr addObject:dataModel];
  270. }
  271. dataModel.isSelectType = !dataModel.isSelectType;
  272. [self setEditTypeTitleFun];
  273. }
  274. }
  275. - (void)didClickSelectAllButton:(UIButton*)button
  276. {
  277. //button.selected = !button.selected;
  278. [_didSelectListArr removeAllObjects];
  279. for (lastFileModel* dataModel in _lastFileDataArr) {
  280. if(!button.selected){
  281. dataModel.isSelectType = button.selected;
  282. }
  283. else{
  284. [_didSelectListArr addObject:dataModel];
  285. dataModel.isSelectType = button.selected;
  286. }
  287. }
  288. [self.tableView reloadData];
  289. [self setEditTypeTitleFun];
  290. }
  291. #pragma mark 设置选中标题
  292. - (void)setEditTypeTitleFun
  293. {
  294. [_curEditTypeHeadView setTitleLabetextByNumbers:_didSelectListArr.count];
  295. if(_didSelectListArr.count > 0){
  296. [self setViewEditTypeFun];
  297. }
  298. else{
  299. [self userCancelEditTypeFun];
  300. }
  301. }
  302. #pragma mark 删除图片
  303. - (void)showDeleteAlearViewFun
  304. {
  305. NSString *titleStr = NSLocalizedString(@"delete_file_title_msg",nil);
  306. NSString *tipStr = NSLocalizedString(@"NAS_last_file_del_tip",nil);
  307. KWeakSelf
  308. ComontAlretDeleteTypeViewController *curAlretVC= [[ComontAlretDeleteTypeViewController alloc]
  309. initWithTitle:titleStr
  310. msg:tipStr
  311. imageStr:nil
  312. cancelTitle:NSLocalizedString(@"other_cancel",nil)
  313. okTitle:NSLocalizedString(@"other_confirm",nil)
  314. otherTitle:NSLocalizedString(@"NAS_last_file_del_cloudFile_tip",nil)
  315. isOkBtnHighlight:YES
  316. didClickOk:^(BOOL isDeleteAll) {
  317. [weakSelf didClickDeleteOkButBy:isDeleteAll];
  318. } didClickCancel:^{
  319. }];
  320. curAlretVC.modalPresentationStyle = UIModalPresentationCustom;
  321. [self presentViewController:curAlretVC animated:YES completion:^{
  322. curAlretVC.view.superview.backgroundColor = [UIColor clearColor];
  323. }];
  324. }
  325. - (void)didClickDeleteOkButBy:(NSInteger)isDeleteCloudFile
  326. {
  327. //1.删除本地数据
  328. for (NASFilePicDataArrModel *dataModel in _didSelectListArr) {
  329. [[lastFileManager shareManager] deleteFileInfoWithUrl:dataModel.path];
  330. }
  331. //2.删除云机文件
  332. if(isDeleteCloudFile){
  333. [self delFileListFun];
  334. }
  335. else{
  336. [[iToast makeText:NSLocalizedString(@"delete_file_suc_msg",nil)] show];
  337. [self didDeleteSucFun];
  338. }
  339. }
  340. #pragma mark 删除文件数据
  341. - (void)delFileListFun
  342. {
  343. NSMutableDictionary*paraDict = [NSMutableDictionary new];
  344. NSMutableArray *pathArr = [NSMutableArray new];
  345. for (NASFilePicDataArrModel *dataModel in _didSelectListArr) {
  346. [pathArr addObject:dataModel.path];
  347. }
  348. [paraDict setValue:pathArr forKey:@"path"];
  349. [self showNewIndicatorWithCanBack:YES canTouch:NO];
  350. //NSString*code = [[NSString alloc] initWithFormat:@"delFile?path=%@",paraDict[@"path"]]; //delFile?path=[/storage/emulated/0/Download/IMG_6464.HEIC]
  351. KWeakSelf //@"delFile"
  352. [[netWorkManager shareInstance] cloudPhonePostCallBackCode:@"delFile" Parameters:paraDict success:^(id _Nonnull responseObject) {
  353. [weakSelf removeNewIndicator];
  354. SuperModel *model = [[SuperModel alloc] initWithDictionary:responseObject error:nil];
  355. if(model && model.status == 0){
  356. [[iToast makeText:NSLocalizedString(@"delete_file_suc_msg",nil)] show];
  357. [weakSelf didDeleteSucFun];
  358. }
  359. else{
  360. }
  361. } failure:^(NSError * _Nonnull error) {
  362. [weakSelf removeNewIndicator];
  363. }];
  364. }
  365. #pragma mark 删除成功
  366. - (void)didDeleteSucFun
  367. {
  368. [_didSelectListArr removeAllObjects];
  369. [self setEditTypeTitleFun];
  370. [self getLastFileDataFun];
  371. }
  372. #pragma mark 文件下载
  373. - (void)gotoDownLoadFileFun
  374. {
  375. if(_didSelectListArr.count == 0){
  376. [[iToast makeText:@""] show];
  377. return;
  378. }
  379. NSMutableArray *arr = [NSMutableArray new];
  380. for (lastFileModel *dataModel in _didSelectListArr) {
  381. couldPhoneFileModel* fileModel = [couldPhoneFileModel new];
  382. fileModel.fileType = dataModel.type;
  383. fileModel.path = dataModel.path;
  384. fileModel.name = dataModel.name;
  385. fileModel.length = dataModel.size;
  386. fileModel.time = dataModel.duration;
  387. [arr addObject:fileModel];
  388. }
  389. uploadFileRecordViewController *vc = [uploadFileRecordViewController new];
  390. [self.navigationController pushViewController:vc animated:YES];
  391. vc.isDownloadingType = YES;
  392. [vc gotoDownloadFile:arr];
  393. }
  394. #pragma mark 用户点击分享
  395. - (void)gotoShareViewFun
  396. {
  397. if (_didSelectListArr.count > 5) {
  398. [[iToast makeText:NSLocalizedString(@"share_max_count_tip2",nil)] show];
  399. return;
  400. }
  401. editShareView *editShareV = [[editShareView alloc] init];
  402. editShareV.didSelectListArr = _didSelectListArr;
  403. editShareV.shareFileType = @"6";
  404. editShareV.isLastFileType = YES;
  405. [self.view addSubview:editShareV];
  406. [editShareV mas_makeConstraints:^(MASConstraintMaker *make) {
  407. make.left.mas_equalTo(0);
  408. make.right.mas_equalTo(0);
  409. make.bottom.mas_equalTo(0);
  410. make.top.mas_equalTo(0);
  411. }];
  412. }
  413. #pragma mark 获取分享开关
  414. -(void)queryShareSwitchFunFun
  415. {
  416. NSMutableDictionary *paraDict = [NSMutableDictionary new];
  417. [paraDict setValue:@7 forKey:@"type"];
  418. KWeakSelf
  419. [[netWorkManager shareInstance] CommonGetWithCallBackCode:queryShareSwitchFun Parameters:paraDict success:^(id _Nonnull responseObject){
  420. queryShareModel *queryShareMod = [[queryShareModel alloc] initWithDictionary:responseObject error:nil];
  421. if(queryShareMod){
  422. self->canShareType = queryShareMod.data.configValue;
  423. [weakSelf.curEditTypeBottomView setCanShaewFunBy:queryShareMod.data.configValue];
  424. }
  425. } failure:^(NSError * _Nonnull error) {
  426. }];
  427. }
  428. - (void)viewWillAppear:(BOOL)animated{
  429. [super viewWillAppear:animated];
  430. [self getLastFileDataFun];
  431. [self queryShareSwitchFunFun];
  432. }
  433. #pragma mark 获取最近文件数据
  434. - (void)getLastFileDataFun
  435. {
  436. _lastFileDataArr = [lastFileManager shareManager].lastFileListArr;
  437. //HLog(@"%@",_lastFileDataArr);
  438. [self.tableView reloadData];
  439. }
  440. @end