// // addAudioToPlayListViewController.m // 双子星云手机 // // Created by xd h on 2024/7/15. // #import "addAudioToPlayListViewController.h" #import "couldPhoneFileListModel.h" #import "downloadManager.h" #import "uploadFileRecordViewController.h" #import "UIScrollView+EmptyDataSet.h" #import "diskListBgView.h" #import "diskListTableView.h" #import "downLoadPreViewCell.h" #import "editTypeHeadView.h" #import "addAudioToPlayListBottomView.h" #import "editShareView.h" #import "previewToUploadFileView.h" #import "netWorkManager.h" #import "NASFileAudioModel.h" #import "audioPlayListManager.h" @interface addAudioToPlayListViewController () { UIButton *tapBtn; } @property (nonatomic, strong) UITableView *tableView; @property (strong, nonatomic) UILabel *MytitleLabel; @property (strong, nonatomic) UIImageView *selectTip; @property (nonatomic, strong) diskListBgView *diskListBgV; @property (nonatomic, strong) diskListTableView *diskListTableV; @property (nonatomic, strong) NSMutableArray*diskListArr; @property (nonatomic, copy) NSString *defaultDiskPath; @property(nonatomic,assign) BOOL isEditType; @property(nonatomic,strong) editTypeHeadView*curEditTypeHeadView; @property(nonatomic,strong) addAudioToPlayListBottomView*bottomView; @property (nonatomic, strong) NSMutableArray*didSelectListArr;//选中的数据 @property (nonatomic, strong)NASFileAudioModel * curNASFileAudioMod; @end @implementation addAudioToPlayListViewController - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. [self.toolBar setHidden:YES]; [self.navigationBar setHidden:YES]; [self.navBarBGView setHidden:NO]; self.navBarBGView.backgroundColor = [UIColor whiteColor]; [self.view setBackgroundColor:[UIColor whiteColor]]; [self drawAnyView]; _didSelectListArr = [NSMutableArray new]; //数据埋点 //[[netWorkManager shareInstance] DataEmbeddingPointBy:2 withEventValue:@"Music"]; } - (void)drawAnyView{ [self initNavHeadUIFun]; _curEditTypeHeadView = [[editTypeHeadView alloc] init]; _curEditTypeHeadView.hidden = YES; [self.navBarBGView addSubview:_curEditTypeHeadView]; [_curEditTypeHeadView mas_makeConstraints:^(MASConstraintMaker *make) { make.left.mas_equalTo(0); make.right.mas_equalTo(0); make.bottom.mas_equalTo(0); make.height.mas_equalTo(NAVIHEIGHT - AdaptNaviHeight); }]; #pragma mark 编辑状态的 取消 和全选按钮 响应事件 KWeakSelf _curEditTypeHeadView.didClickButtonFun = ^(NSInteger tag) { if(tag==1){ [weakSelf userCancelEditTypeFun]; } }; _curEditTypeHeadView.didClickSelectAllFun = ^(UIButton * _Nonnull but) { [weakSelf didClickSelectAllButton:but]; }; _bottomView = [[addAudioToPlayListBottomView alloc] init]; [self.view addSubview:_bottomView]; [_bottomView mas_makeConstraints:^(MASConstraintMaker *make) { make.left.mas_equalTo(0); make.right.mas_equalTo(0); make.bottom.mas_equalTo(0); make.height.mas_equalTo(60 + safeArea); }]; #pragma mark 编辑状态的 添加播放列表 响应事件 _bottomView.didClickButtonFun = ^(NSInteger tag) { [weakSelf addToAudioPlayListFun]; }; [self.view addSubview:self.tableView]; [self.tableView mas_makeConstraints:^(MASConstraintMaker *make) { make.left.mas_equalTo(0); make.right.mas_equalTo(0); //make.bottom.mas_equalTo(-(safeArea)); make.bottom.mas_equalTo(_bottomView.mas_top); make.top.equalTo(self.navBarBGView.mas_bottom).offset(10.f); }]; NSMutableArray *arr = [NSMutableArray new]; NSArray *diskList = ksharedAppDelegate.cloudPhoneExtraFileListMod.data; if(diskList && [diskList isKindOfClass:[NSArray class]]){ for (cloudPhoneExtraFileModel *model in diskList) { model.isCheckType = NO; [arr addObject:model]; } } if(arr.count >0){ cloudPhoneExtraFileModel *model = arr.firstObject; model.isCheckType = YES; _defaultDiskPath = model.extraPath; } _diskListArr = arr; [self setTitleAfterGetdiskFun]; } - (void)initNavHeadUIFun { //title UILabel *titleLabel = [[UILabel alloc] init]; titleLabel.textAlignment = NSTextAlignmentCenter; titleLabel.font = [UIFont boldSystemFontOfSize:16.0]; titleLabel.textColor = [UIColor blackColor]; titleLabel.translatesAutoresizingMaskIntoConstraints = NO; [self.navBarBGView addSubview:titleLabel]; self.MytitleLabel = titleLabel; //selectTipImageView UIImageView *selectTip = [[UIImageView alloc] init]; selectTip.image = [UIImage imageNamed:@"upload_image_arrow"]; selectTip.translatesAutoresizingMaskIntoConstraints = NO; [self.navBarBGView addSubview:selectTip]; self.selectTip = selectTip; tapBtn = [UIButton buttonWithType:UIButtonTypeCustom]; tapBtn.backgroundColor = [UIColor clearColor]; tapBtn.translatesAutoresizingMaskIntoConstraints = NO; [tapBtn addTarget:self action:@selector(selectDiskAction:) forControlEvents:UIControlEventTouchUpInside]; [self.navBarBGView addSubview:tapBtn]; [tapBtn mas_makeConstraints:^(MASConstraintMaker *make) { make.centerX.mas_equalTo(self.navBarBGView.mas_centerX); make.centerY.mas_equalTo(self.backBtn.mas_centerY); make.width.mas_equalTo(100); make.height.mas_equalTo(30); }]; [self setTitleLabelText:@""]; } #pragma mark - 懒加载 - (UITableView *)tableView{ if (!_tableView) { _tableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, SCREEN_W, SCREEN_H - TABBARHEIGHT) style:UITableViewStylePlain]; _tableView.delegate = self; _tableView.dataSource = self; _tableView.showsVerticalScrollIndicator = NO; _tableView.showsHorizontalScrollIndicator = NO; // _tableView.contentInset = UIEdgeInsetsMake(-H_STATE_BAR, 0, 0, 0); [_tableView setSeparatorStyle:(UITableViewCellSeparatorStyleNone)]; [_tableView setSeparatorColor:[UIColor clearColor]]; [_tableView setBackgroundColor:[UIColor clearColor]]; [_tableView setTableFooterView:[UIView new]]; [_tableView setBounces:YES]; if (@available(iOS 15.0, *)) { _tableView.sectionHeaderTopPadding = 0; } //空数据引入第三方开源处理 _tableView.emptyDataSetSource = self; _tableView.emptyDataSetDelegate = self; } return _tableView; } - (diskListBgView*)diskListBgV { if(!_diskListBgV){ _diskListBgV = [[diskListBgView alloc] initWithFrame:CGRectMake(0, 0, 0, 0)]; _diskListBgV.hidden = YES; [self.view addSubview:_diskListBgV]; KWeakSelf _diskListBgV.didTapWhitePlace = ^{ [weakSelf hideDiskListVieFun]; }; [_diskListBgV mas_makeConstraints:^(MASConstraintMaker *make) { make.left.mas_equalTo(0); make.bottom.mas_equalTo(0); make.right.mas_equalTo(0); make.top.mas_equalTo(self.navBarBGView.mas_bottom); }]; [self.view addSubview:self.diskListTableV]; self.diskListTableV.hidden = YES; [self.diskListTableV mas_makeConstraints:^(MASConstraintMaker *make) { make.left.mas_equalTo(0); make.height.mas_equalTo(3*70); make.right.mas_equalTo(0); make.top.mas_equalTo(self.navBarBGView.mas_bottom); }]; self.diskListTableV.diskListArr = _diskListArr; self.diskListTableV.didClickDiskModel = ^(NSString * _Nonnull checkPath) { [weakSelf didCheckDiskFunByPath:checkPath]; }; } return _diskListBgV; } - (UITableView *)diskListTableV{ if (!_diskListTableV) { _diskListTableV = [[diskListTableView alloc] init]; // } return _diskListTableV; } #pragma mark 选中磁盘 - (void)didCheckDiskFunByPath:(NSString*)pathStr { if(self.defaultDiskPath && self.defaultDiskPath.length>0 && ![self.defaultDiskPath isEqualToString:pathStr]){ //切换硬盘了 取消全选 [_didSelectListArr removeAllObjects]; } self.defaultDiskPath = pathStr; [self getFileListFun]; [self setTitleAfterGetdiskFun]; [self hideDiskListVieFun]; } #pragma mark - 列表委托 - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{ return 1; } - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { if(!_curNASFileAudioMod){ return 0; } return _curNASFileAudioMod.data.list.count; } - (downLoadPreViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ __block NSInteger row = indexPath.row; static NSString *identifier = @"downLoadPreViewCell"; downLoadPreViewCell * cell = [tableView dequeueReusableCellWithIdentifier:identifier]; cell.selectionStyle = UITableViewCellSelectionStyleNone; if (!cell){ cell = [[downLoadPreViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:identifier]; [cell setSelectionStyle:UITableViewCellSelectionStyleNone]; [cell setBackgroundColor:[UIColor clearColor]]; [cell setAccessoryType:(UITableViewCellAccessoryNone)]; [cell.bgViewLayer removeFromSuperlayer]; [cell.titleLabel2 setHidden:NO]; [cell.rightImage setHidden:YES]; [cell.lineView setHidden:YES]; [cell.checkButton setHidden:NO]; } if(row < _curNASFileAudioMod.data.list.count){ NASFileAudioDataModel* dataModel = _curNASFileAudioMod.data.list[row]; cell.curNASFileAudioDataModel = dataModel; KWeakSelf cell.didClickSwitch = ^(BOOL SwitchOn) { [weakSelf userCheckFilePreviewByRow:row]; }; } return cell; } - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{ return 70; } #pragma mark 空数据 - (UIImage *)imageForEmptyDataSet:(UIScrollView *)scrollView { NSString *imageName = @"common_no_data_pic"; return [UIImage imageNamed:imageName]; } - (NSAttributedString *)titleForEmptyDataSet:(UIScrollView *)scrollView { NSString *text = NSLocalizedString(@"common_no_data_tip",nil); NSDictionary *attributes = @{NSFontAttributeName: [UIFont systemFontOfSize:16.0f], NSForegroundColorAttributeName: HW999999Color}; return [[NSAttributedString alloc] initWithString:text attributes:attributes]; } //调整图片位置 - (CGFloat)verticalOffsetForEmptyDataSet:(UIScrollView *)scrollView { return -150; } #pragma mark 用户长按图片进入编辑 - (void)setViewEditTypeFun { _isEditType = YES; //[self.tableView reloadData]; _curEditTypeHeadView.hidden = NO; } #pragma mark 用户取消编辑编辑 - (void)userCancelEditTypeFun { //数据还原 for (NASFileAudioDataModel*model in _didSelectListArr) { model.isSelectType = NO; } [_didSelectListArr removeAllObjects]; [_bottomView setButtonStateFunBy:NO]; _isEditType = NO; [self.tableView reloadData]; _curEditTypeHeadView.hidden = YES; } - (void)userCheckFilePreviewByRow:(NSInteger)row { if(row < _curNASFileAudioMod.data.list.count){ NASFileAudioDataModel* dataModel = _curNASFileAudioMod.data.list[row]; if(dataModel.isSelectType){ [_didSelectListArr removeObject:dataModel]; } else{ [_didSelectListArr addObject:dataModel]; } dataModel.isSelectType = !dataModel.isSelectType; [self setEditTypeTitleFun]; } } - (void)didClickSelectAllButton:(UIButton*)button { //button.selected = !button.selected; [_didSelectListArr removeAllObjects]; for (NASFileAudioDataModel* dataModel in _curNASFileAudioMod.data.list) { if(!button.selected){ dataModel.isSelectType = button.selected; } else{ [_didSelectListArr addObject:dataModel]; dataModel.isSelectType = button.selected; } } [self.tableView reloadData]; //[self.dataCollectionView reloadData]; [self setEditTypeTitleFun]; } #pragma mark 设置选中标题 - (void)setEditTypeTitleFun { [_curEditTypeHeadView setTitleLabetextByNumbers:_didSelectListArr.count]; if(_didSelectListArr.count > 0){ [self setViewEditTypeFun]; } else{ [self userCancelEditTypeFun]; } BOOL canClick = _didSelectListArr.count >0 ? YES : NO; [_bottomView setButtonStateFunBy:canClick]; } #pragma mark 设置标题 - (void)setTitleLabelText:(NSString*)title { NSArray *diskNameArr = [_defaultDiskPath componentsSeparatedByString:@"/"]; if(diskNameArr && diskNameArr.count >= 2){ NSString *name = diskNameArr.lastObject; if(name.length == 0) { name = diskNameArr[diskNameArr.count -2]; } //name = [name stringByReplacingOccurrencesOfString:@"sdcard" withString:NSLocalizedString(@"disk_phone_default_tip",nil)]; name = [iTools changePathToShowPathBy:name]; title = [[NSString alloc] initWithFormat:@"[%@]%@",name,title]; } self.MytitleLabel.text = title; CGFloat curWidth = [title boundingRectWithSize:CGSizeMake(SCREEN_W, 30) options:(NSStringDrawingUsesLineFragmentOrigin) attributes:@{NSFontAttributeName:[UIFont boldSystemFontOfSize:16.f]} context:nil].size.width; curWidth += 20; //HLog(@"title w:%f",curWidth); [self.MytitleLabel mas_remakeConstraints:^(MASConstraintMaker *make) { make.centerX.mas_equalTo(self.navBarBGView.mas_centerX).offset(-10); make.centerY.mas_equalTo(self.backBtn.mas_centerY); make.width.mas_equalTo(curWidth); make.height.mas_equalTo(30); }]; //self.MytitleLabel.backgroundColor = [UIColor greenColor]; [self.selectTip mas_makeConstraints:^(MASConstraintMaker *make) { make.left.mas_equalTo(self.MytitleLabel.mas_right).offset(0); make.centerY.mas_equalTo(self.backBtn.mas_centerY); make.width.mas_equalTo(15); make.height.mas_equalTo(15); }]; [tapBtn mas_remakeConstraints:^(MASConstraintMaker *make) { make.centerX.mas_equalTo(self.navBarBGView.mas_centerX); make.centerY.mas_equalTo(self.backBtn.mas_centerY); make.width.mas_equalTo(curWidth+15); make.height.mas_equalTo(30); }]; } #pragma mark 选择硬盘 - (void)selectDiskAction:(UIButton*)but { if(self.diskListBgV.hidden){ [self showDiskListVieFun]; } else{ [self hideDiskListVieFun]; } } - (void)showDiskListVieFun { self.diskListBgV.hidden = NO; self.diskListTableV.hidden = NO; [UIView animateWithDuration:0.3 animations:^{ CGRect rect = self.diskListTableV.frame; rect.origin.y = CGRectGetMaxY(self.navBarBGView.frame); self.diskListTableV.frame = rect; self.selectTip.transform = CGAffineTransformMakeRotation(M_PI); }]; } - (void)hideDiskListVieFun { self.diskListBgV.hidden = YES; [UIView animateWithDuration:0.3 animations:^{ self.diskListTableV.hidden = YES; self.selectTip.transform = CGAffineTransformIdentity; }completion:^(BOOL finished) { CGRect rect = self.diskListTableV.frame; rect.origin.y = 0; self.diskListTableV.frame = rect; }]; } #pragma mark 设置标题 - (void)setTitleAfterGetdiskFun { [self setTitleLabelText:NSLocalizedString(@"my_set_no_music",nil)]; } - (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; } - (void)viewDidAppear:(BOOL)animated{ [super viewDidAppear:animated]; [self showDownloadTipFun]; if(!_curNASFileAudioMod){ [self getFileListFun]; } } - (void)viewWillDisappear:(BOOL)animated{ [super viewWillDisappear:animated]; //[self removeNewIndicator]; [self removeNewIndicatorHaveStr]; } - (void)gotoDownloadloadFileRecordFun { uploadFileRecordViewController *vc = [uploadFileRecordViewController new]; [self.navigationController pushViewController:vc animated:YES]; vc.isDownloadingType = YES; //[vc gotoDownloadFile:_downloadFileBottomV.indexPathsForSelectedItems]; } - (void)showDownloadTipFun { BOOL didReadUploadTipType = [HWDataManager getBoolWithKey:Const_file_downLoad_need_read]; if(didReadUploadTipType){ return; } //KWeakSelf /*弹窗提示恢复出厂*/ ComontAlretViewController *nextVC = [[ComontAlretViewController alloc] initWithTiTle:@"" msg:NSLocalizedString(@"upload_download_need_read_msg",nil) imageStr:@"" cancelTitle:NSLocalizedString(@"guide_set_pwd_guide_know",nil) okTitle:@"" isOkBtnHighlight:NO didClickOk:^{ } didClickCancel:^{ [HWDataManager setBoolWithKey:Const_file_downLoad_need_read value:YES]; }]; nextVC.modalPresentationStyle = UIModalPresentationCustom; [self presentViewController:nextVC animated:YES completion:^{ nextVC.view.superview.backgroundColor = [UIColor clearColor]; }]; } - (void)didiClikRightButGotoTransferListFun:(UIButton*)but { uploadFileRecordViewController *vc = [uploadFileRecordViewController new]; [self.navigationController pushViewController:vc animated:YES]; } #pragma mark 获取文件数据 - (void)getFileListFun { NSMutableDictionary*paraDict = [NSMutableDictionary new]; [paraDict setValue:@"audio" forKey:@"type"]; NSArray *diskNameArr = [_defaultDiskPath componentsSeparatedByString:@"/"]; if(diskNameArr && diskNameArr.count >= 2){ NSString *name = diskNameArr.lastObject; if(name.length == 0) { name = diskNameArr[diskNameArr.count -2]; } [paraDict setValue:name forKey:@"path"]; } [self showNewIndicatorHaveStrWithCanBack:YES canTouch:NO showText:NSLocalizedString(@"common_loading_tip",nil)]; KWeakSelf [[netWorkManager shareInstance] cloudPhoneGETCallBackCode:@"getFileList" Parameters:paraDict success:^(id _Nonnull responseObject) { [weakSelf removeNewIndicatorHaveStr]; weakSelf.curNASFileAudioMod = [[NASFileAudioModel alloc] initWithDictionary:responseObject error:nil]; if(weakSelf.curNASFileAudioMod && weakSelf.curNASFileAudioMod.status == 0){ [weakSelf.tableView reloadData]; } } failure:^(NSError * _Nonnull error) { [weakSelf removeNewIndicatorHaveStr]; if([AFNetworkReachabilityManager sharedManager].networkReachabilityStatus == AFNetworkReachabilityStatusNotReachable) { [[iToast makeText:NSLocalizedString(@"phone_network_fail_Tips",nil)] show]; } else{ [[iToast makeText:NSLocalizedString(@"netWork_error_show_tip",nil)] show]; } }]; } #pragma mark 添加播放列表 响应事件 - (void)addToAudioPlayListFun { if (_didSelectListArr.count == 0) { return; } BOOL didAddAudioType = NO; for (NASFileAudioDataModel* dataModel in _didSelectListArr) { lastFileModel *lastFileMod = [lastFileModel new]; lastFileMod.path = dataModel.path; lastFileMod.name = dataModel.name; lastFileMod.time = dataModel.time; lastFileMod.size = dataModel.size; lastFileMod.duration = dataModel.duration; lastFileMod.type = @"audio"; lastFileMod.lastPreTime = [iTools getNowTimeStamp]; BOOL curAddType = [[audioPlayListManager shareManager] saveFileInfoWith:lastFileMod with:dataModel.path]; if(curAddType){ didAddAudioType = YES; } } if(didAddAudioType){ [[iToast makeText:NSLocalizedString(@"NAS_add_audio_to_play_list_ok",nil)] show]; } else{ [[iToast makeText:NSLocalizedString(@"NAS_add_audio_to_play_list_didInList",nil)] show]; } if(_didNeedToRegetAudioPlayListFun){ _didNeedToRegetAudioPlayListFun(); } [self.navigationController popViewControllerAnimated:YES]; } @end