// // receiveView.m // 双子星云手机 // // Created by xd h on 2024/5/23. // #import "receiveView.h" #import "receiveHeadView.h" #import "receiveDownloadRecordTableView.h" #import "receiveSaveRecordTableView.h" #import "boxSaveFileManager.h" #import "downStatusModel.h" #import "boxDownloadFileManager.h" #import "AFHTTPSessionManager.h" @interface receiveView () { } @property(nonatomic,assign) BOOL isFirstCheckSaveFile;//首次进来 需要检测保存文件的状态 @property(nonatomic,strong) receiveHeadView * curReceiveHeadView; @property(nonatomic,strong) receiveDownloadRecordTableView * downloadRecordTableView; @property(nonatomic,strong) receiveSaveRecordTableView * saveRecordTableView; @end @implementation receiveView - (id)initWithFrame:(CGRect)frame{ self = [super initWithFrame:frame]; [self setBackgroundColor:[UIColor whiteColor]]; _isReceiveType = 1; [self drawAnyView]; return self; } - (void)drawAnyView{ _curReceiveHeadView = [[receiveHeadView alloc] init]; [self addSubview:_curReceiveHeadView]; [_curReceiveHeadView mas_makeConstraints:^(MASConstraintMaker *make) { make.left.mas_equalTo(0); make.right.mas_equalTo(0); make.top.mas_equalTo(0); make.height.mas_equalTo(40); }]; KWeakSelf #pragma mark 点击接收的下载或者保存 _curReceiveHeadView.didClickbuttonFun = ^(NSInteger tag) { [weakSelf didClickHeadButtonFun:tag]; }; _downloadRecordTableView = [[receiveDownloadRecordTableView alloc] init]; [self addSubview:_downloadRecordTableView]; [_downloadRecordTableView mas_makeConstraints:^(MASConstraintMaker *make) { make.left.mas_equalTo(0); make.right.mas_equalTo(0); make.top.equalTo(_curReceiveHeadView.mas_bottom).offset(0); make.bottom.mas_equalTo(40); }]; _downloadRecordTableView.didLongPressClick = ^{ [weakSelf handleLongPressClickFun]; }; _saveRecordTableView = [[receiveSaveRecordTableView alloc] init]; _saveRecordTableView.hidden = YES; [self addSubview:_saveRecordTableView]; [_saveRecordTableView mas_makeConstraints:^(MASConstraintMaker *make) { make.left.mas_equalTo(0); make.right.mas_equalTo(0); make.top.equalTo(_curReceiveHeadView.mas_bottom).offset(0); make.bottom.mas_equalTo(40); }]; _saveRecordTableView.didLongPressClick = ^{ [weakSelf handleLongPressClickFun]; }; _saveRecordTableView.didClickReSaveBlock = ^(ShareFileDataModel * _Nonnull model) { weakSelf.isFirstCheckSaveFile = YES; [weakSelf PollingCheckSaveFileToBoxStateFun]; }; } #pragma mark 长按事件传出去 - (void)handleLongPressClickFun { if(self->_didLongPressClick){ self->_didLongPressClick(); } } #pragma mark 点击下载和接收 - (void)didClickHeadButtonFun:(NSInteger)tag { _isReceiveType = tag; if(tag == 1){ _downloadRecordTableView.hidden = NO; _saveRecordTableView.hidden = YES; } else if(tag == 2){ _downloadRecordTableView.hidden = YES; _saveRecordTableView.hidden = NO; } } - (void)setIsReceiveType:(NSInteger)isReceiveType { _isReceiveType = isReceiveType; if(isReceiveType == 2){ [_curReceiveHeadView didClickButFun:_curReceiveHeadView.saveButton]; } } - (void)setIsEditType:(BOOL)isEditType{ _isEditType = isEditType; if(_isReceiveType == 1){ _downloadRecordTableView.isEditType = isEditType; } else{ _saveRecordTableView.isEditType = isEditType; } } #pragma mark 点击全选 - (void)setIsSelectAllType:(BOOL)isSelectAllType { if(_isReceiveType == 1){ _downloadRecordTableView.isSelectAllType = isSelectAllType; } else{ _saveRecordTableView.isSelectAllType = isSelectAllType; } } #pragma mark 获取本地数据库数据 - (void)getAllDataFun{ [self getBoxDownLoadDataFun]; [self getBoxSaveDataFun]; } #pragma mark 读取保存到盒子的数据库 - (void)getBoxSaveDataFun { KWeakSelf [[boxSaveFileManager shareInstance] getDataInDatabaseFun:YES complete:^(NSMutableArray * _Nonnull Arr) { [weakSelf AferGetBoxSaveDataBy:Arr]; }]; } - (void)AferGetBoxSaveDataBy:(NSMutableArray*)arr { _saveRecordTableView.outSideDataArr = arr; _isFirstCheckSaveFile = YES; KWeakSelf dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ [weakSelf checkSaveFileToBoxStateFun]; }); } - (NSMutableArray*)selectModelArr { if(_isReceiveType == 1){ return _downloadRecordTableView.selectModelArr; } else{ return _saveRecordTableView.selectModelArr; } return [NSMutableArray new]; } #pragma mark 单个点击选中后删除 - (void)deleteModelOneByOneFun{ if(_isReceiveType == 1){ [_downloadRecordTableView deleteModelOneByOneFun]; } else{ [_saveRecordTableView deleteModelOneByOneFun]; } } #pragma mark 查询保存到盒子的下载状态 - (void)checkSaveFileToBoxStateFun { NSMutableArray *checkArr = _saveRecordTableView.boxSaveingArr; if(!checkArr || checkArr.count == 0){ return; } NSMutableDictionary*paraDict = [NSMutableDictionary new]; NSMutableArray *pathArr = [NSMutableArray new]; for (ShareFileDataModel*dataModel in checkArr){ NSString *pathStr = dataModel.fileUrl; [pathArr addObject: pathStr]; } HLog(@"%@",pathArr); if (pathArr) { NSString *jsonStr = [iTools toJsonStrWithArray:pathArr]; if(jsonStr){ [paraDict setValue:jsonStr forKey:@"urls"]; } } KWeakSelf [[netWorkManager shareInstance] cloudPhoneGETCallBackCode:@"downStatus" Parameters:paraDict success:^(id _Nonnull responseObject) { downStatusModel *model = [[downStatusModel alloc] initWithDictionary:responseObject error:nil]; if(model && model.status == 0){ [weakSelf updateDataAfterCheckDownStatus:model]; } [weakSelf PollingCheckSaveFileToBoxStateFun]; } failure:^(NSError * _Nonnull error) { [weakSelf PollingCheckSaveFileToBoxStateFun]; 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 5秒轮询一次查询保存状态 - (void)PollingCheckSaveFileToBoxStateFun { KWeakSelf dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(5.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ [weakSelf checkSaveFileToBoxStateFun]; }); } #pragma mark 查询保存到盒子的下载状态后更新数据 - (void)updateDataAfterCheckDownStatus:(downStatusModel*)downStatusMod { [[boxSaveFileManager shareInstance] updataBoxSaveDataBy:downStatusMod]; [self updataBoxSaveDataBy:downStatusMod]; } #pragma mark 更新本地数据 - (void)updataBoxSaveDataBy:(downStatusModel*)downStatusMod { for (downStatusDataModel*updataModel in downStatusMod.data) { NSString *ProgressMsg = updataModel.msg; CGFloat saveProgress = 0.0; NSArray *strArr = [ProgressMsg componentsSeparatedByString:@"="]; if(strArr.count >= 2){ NSString*lastProgressMsg = strArr.lastObject; saveProgress = lastProgressMsg.floatValue; } NSInteger downloadStatus = updataModel.status; for (ShareFileDataModel* model in _saveRecordTableView.boxSaveingArr) { if ([updataModel.url isEqualToString:model.fileUrl]) { model.downloadStatus = downloadStatus; if (updataModel.curStatus == 0 || updataModel.curStatus == 3) { model.saveProgress = saveProgress; if(_isFirstCheckSaveFile){ //检测文件是否存在 [self checkBoxSaveFileUrlStateBy:model]; } } else if (updataModel.curStatus == 1) { //成功 model.saveboxStateType = saveBoxStateDone; [_saveRecordTableView.boxSaveDoneArr addObject:model]; [_saveRecordTableView.boxSaveingArr removeObject:model]; } else{ //失败 model.saveboxStateType = saveBoxStateFail; [_saveRecordTableView.boxSavefailArr addObject:model]; [_saveRecordTableView.boxSaveingArr removeObject:model]; } break; } } } [_saveRecordTableView RefreshAllDataFun]; _isFirstCheckSaveFile = NO; } #pragma mark 读取盒子下载的数据库 - (void)getBoxDownLoadDataFun { KWeakSelf [[boxDownloadFileManager shareInstance] getDataInDatabaseFun:YES complete:^(NSMutableArray * _Nonnull Arr) { [weakSelf AferGetBoxDownloadDataBy:Arr]; }]; } - (void)AferGetBoxDownloadDataBy:(NSMutableArray*)arr { _downloadRecordTableView.outSideDataArr = arr; [_downloadRecordTableView reDownLoadAgainFun]; } #pragma mark 检测保存盒子的url是否存在 - (void)checkBoxSaveFileUrlStateBy:(ShareFileDataModel*)dataModel{ KWeakSelf [[netWorkManager shareInstance] cloudPhoneCheckUrlCallBackCode:dataModel.fileUrl success:^(id _Nonnull responseObject) { SuperModel *model = responseObject; if(model){ if( model.status == -1){ [weakSelf updataBoxSaveDataByFail:dataModel]; } } } failure:^(NSError * _Nonnull error) { HLog(@"%@",error); }]; } #pragma mark 更新本地数据 - (void)updataBoxSaveDataByFail:(ShareFileDataModel*)updataModel { for (ShareFileDataModel* model in _saveRecordTableView.boxSaveingArr) { if ([updataModel.fileUrl isEqualToString:model.fileUrl]) { //失败 model.saveboxStateType = saveBoxStateFail; model.downloadStatus = -1; [[boxSaveFileManager shareInstance] updataBoxSaveDataByFail:model]; [_saveRecordTableView.boxSavefailArr addObject:model]; [_saveRecordTableView.boxSaveingArr removeObject:model]; break; } } [_saveRecordTableView RefreshAllDataFun]; } @end