// // HDLEZDeviceMsgListViewController.m // EZSDK // // Created by 陈启扬 on 2023/3/16. // #import "HDLEZDeviceMsgListViewController.h" #import "HDLEZDeviceMsgListView.h" #import "MJRefreshNormalHeader.h" #import "MJRefreshAutoNormalFooter.h" #import "HDLEZDevMsgListModel.h" #import "MWPhotoBrowser.h" #import "SDWebImageManager.h" #import @interface HDLEZDeviceMsgListViewController () @property (nonatomic, strong) HDLEZDeviceMsgListView *msgListV;//消息列表view @property (nonatomic, strong) MJRefreshNormalHeader *header;//刷新header @property (nonatomic, strong) MJRefreshAutoNormalFooter *footer;//加载footer @property (nonatomic, strong) HDLEZDevMsgListModel *msgListModel;//消息列表model @property (nonatomic, strong) NSMutableArray *msgList;//消息列表(分页获取到的所有消息) @property (nonatomic, assign) NSInteger currentPageNo;//当前页码 @property (nonatomic, assign) NSInteger pageSize;//分页容量 @property (nonatomic, strong) NSMutableArray *photos; // 预览图片信息 @property (nonatomic, strong) NSString *currentPreviewPhoto; // 当前预览的图片 @end @implementation HDLEZDeviceMsgListViewController - (void)viewDidLoad { [super viewDidLoad]; [self setTopBarViewWithTitle:HDLEZLocallizedString(@"device_history")]; [self.topBarView.bottomLine setHidden:YES]; // Do any additional setup after loading the view. } -(void)addSubViews{ // _msgListV=[[HDLEZDeviceMsgListView alloc] init]; [self.view addSubview:_msgListV]; [_msgListV mas_makeConstraints:^(MASConstraintMaker *make) { make.top.equalTo(self.view).offset(HDLEZ_APP_TOP_BAR_HEIGHT); make.left.bottom.right.equalTo(self.view); }]; __weak __typeof(self)weakSelf = self; [_msgListV previewPicture:^(NSString * _Nonnull pictureUrl) { [weakSelf previewPictureWithUrl:pictureUrl]; }]; //下拉刷新 // 设置回调(一旦进入刷新状态,就调用target的action,也就是调用self的loadNewData方法) _header = [MJRefreshNormalHeader headerWithRefreshingTarget:self refreshingAction:@selector(refreshData)]; // 设置自动切换透明度(在导航栏下面自动隐藏) _header.automaticallyChangeAlpha = YES; // 隐藏时间 _header.lastUpdatedTimeLabel.hidden = YES; // 隐藏刷新状态文本 _header.stateLabel.hidden = YES; _msgListV.mj_header=_header; //上拉加载更多 _footer=[MJRefreshAutoNormalFooter footerWithRefreshingTarget:self refreshingAction:@selector(loadMore)]; _footer.refreshingTitleHidden=YES; [_footer setTitle:@"" forState:MJRefreshStateIdle]; [_footer setTitle:HDLEZLocallizedString(@"device_his_no_more_data") forState:MJRefreshStateNoMoreData]; _footer.stateLabel.textColor=HDLEZ_COLOR_TEXT_LIGHT_GRAY; _msgListV.mj_footer=_footer; //开始加载数据 [_header beginRefreshing]; } /*刷新数据 */ -(void)refreshData{ self.msgList=[[NSMutableArray alloc] init]; _currentPageNo=1; _pageSize=20; [self getMsgList]; } /*加载更多 */ -(void)loadMore{ // _currentPageNo+=1; [self getMsgList]; } /*获取历史记录 */ -(void)getMsgList{ __weak __typeof(self)weakSelf = self; [[EZHttpUtil sharedManager] getDeviceMessageByHDL:self.deviceId pageSize:_pageSize pageNo:_currentPageNo completion:^(ResponseData * _Nonnull responseData) { [weakSelf.header endRefreshing]; [weakSelf.footer endRefreshing]; weakSelf.msgListModel=[HDLEZDevMsgListModel yy_modelWithDictionary:responseData.data]; if (responseData.success) { weakSelf.msgListModel=[HDLEZDevMsgListModel yy_modelWithDictionary:responseData.data]; if (weakSelf.currentPageNo == 1) { [weakSelf.msgList removeAllObjects]; } [weakSelf.msgList addObjectsFromArray:weakSelf.msgListModel.list]; weakSelf.msgListV.msgList=weakSelf.msgList; if (weakSelf.msgListModel.list.count == weakSelf.pageSize) { weakSelf.currentPageNo+=1; } else { [weakSelf.footer endRefreshingWithNoMoreData]; } }else{ [weakSelf.view makeToast:responseData.message duration:1.5 position:@"center"]; } }]; } #pragma mark MWPhotoBrowserDelegate - (NSUInteger)numberOfPhotosInPhotoBrowser:(MWPhotoBrowser *)photoBrowser { return self.photos.count; } - (id )photoBrowser:(MWPhotoBrowser *)photoBrowser photoAtIndex:(NSUInteger)index { if (index < self.photos.count) { return [self.photos objectAtIndex:index]; } return nil; } - (void)didClickCurrentPhotoBrowserBlank:(MWPhotoBrowser *)photoBrowser { [self.navigationController popToViewController:self animated:NO]; } - (void)didClickDownLoad:(MWPhotoBrowser *)photoBrowser { __weak __typeof(self)weakSelf = self; [self authPhotoLibraries:^(BOOL isAblity) { if (isAblity) { [weakSelf downloadTheImage]; } else { [weakSelf guideUserOpenAuth]; } }]; } - (void)downloadTheImage { dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ if (!self.currentPreviewPhoto || self.currentPreviewPhoto.length == 0) { [UIView dd_showMessage:NSLocalizedString(@"device_save_gallery_failure", @"下载失败")]; return; } NSURL *url = [NSURL URLWithString:self.currentPreviewPhoto]; SDWebImageManager *manager = [SDWebImageManager sharedManager]; UIImage *img; if ([manager diskImageExistsForURL:url]) { img = [[manager imageCache] imageFromDiskCacheForKey:url.absoluteString]; } else { //从网络下载图片 NSData *data = [NSData dataWithContentsOfURL:url]; img = [UIImage imageWithData:data]; } // 保存图片到相册中 dispatch_async(dispatch_get_main_queue(), ^{ UIImageWriteToSavedPhotosAlbum(img,self, @selector(image:didFinishSavingWithError :contextInfo:),nil); }); }); } //保存图片完成之后的回调 - (void)image:(UIImage *)image didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo { // Was there an error? NSString *message = nil; if (!error) { message = NSLocalizedString(@"device_save_gallery", @"已保存至手机相册"); } else { message = NSLocalizedString(@"device_save_gallery_failure", @"下载失败"); NSLog(@"#######图片保存失败:%@", [error description]); } [UIView dd_showMessage:message]; } /*访问相册权限 */ -(void)authPhotoLibraries:(void(^)(BOOL isAblity))result { PHAuthorizationStatus author =[PHPhotoLibrary authorizationStatus]; if (author == PHAuthorizationStatusRestricted || author ==PHAuthorizationStatusDenied){ if (result) { result(NO); } } else if (author == PHAuthorizationStatusNotDetermined) { // 首次授权 dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); dispatch_async(queue, ^{ [PHPhotoLibrary requestAuthorization:^(PHAuthorizationStatus status) { if (status != PHAuthorizationStatusAuthorized) { if (result) { result(NO); } } else { if (result) { result(YES); } } }]; }); } else { if (result) { result(YES); } } } /*引导用户授权获取图片 */ - (void)guideUserOpenAuth{ UIAlertController *alertC = [UIAlertController alertControllerWithTitle:NSLocalizedString(@"hdl_ez_download_tip", @"温馨提示") message:NSLocalizedString(@"hdl_ez_download_auth", @"请打开访问权限") preferredStyle:(UIAlertControllerStyleAlert)]; UIAlertAction *alertA = [UIAlertAction actionWithTitle:NSLocalizedString(@"hdl_ez_download_cancle", @"取消") style:(UIAlertActionStyleDefault) handler:nil]; UIAlertAction *act = [UIAlertAction actionWithTitle:NSLocalizedString(@"hdl_ez_download_toSet", @"去设置") style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) { // 引导用户设置 NSURL *url = [NSURL URLWithString:UIApplicationOpenSettingsURLString]; if ([[UIApplication sharedApplication] canOpenURL:url]) { [[UIApplication sharedApplication] openURL:url options:@{} completionHandler:nil]; } }]; [alertC addAction:alertA]; [alertC addAction:act]; [self presentViewController:alertC animated:YES completion:nil]; } #pragma mark PrivateMethod - (void)previewPictureWithUrl:(NSString *)picUrl { self.currentPreviewPhoto = picUrl; self.photos = [NSMutableArray array]; [self.photos addObject:[MWPhoto photoWithURL:[NSURL URLWithString:picUrl]]]; MWPhotoBrowser *browser = [[MWPhotoBrowser alloc] initWithDelegate:self]; browser.displayActionButton = NO; browser.zoomPhotosToFill = NO; [browser showDownloadBtn]; [self.navigationController pushViewController:browser animated:NO]; } @end