| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532 |
- //
- // YBImRoomSmallView.m
- // iphoneLive
- //
- // Created by YB007 on 2022/6/17.
- // Copyright © 2022 cat. All rights reserved.
- //
- #import "YBImRoomSmallView.h"
- #import "TConversationCell.h"
- #import "THeader.h"
- #import "TUIKit.h"
- #import "TChatC2CController.h"
- #import "MessageListModel.h"
- #import "MessageFansVC.h"
- #import "MsgTopPubVC.h"
- #import "SelPeopleV.h"
- #import "JCHATAlertViewWait.h"
- #import "MsgSysVC.h"
- #import "OrderMessageVC.h"
- @interface YBImRoomSmallView()<UIGestureRecognizerDelegate,UITableViewDelegate,UITableViewDataSource,V2TIMConversationListener>{
- dispatch_group_t _imgListGroup;
- SelPeopleV * _selV;
-
- TConversationCellData *conver_admin1;//官方通知
- TConversationCellData *conver_admin2;//系统通知
- TConversationCellData *_conversation_fans; //顶部-粉丝
- TConversationCellData *_conversation_zan; //顶部-赞
- TConversationCellData *_conversation_at; //顶部-@
- TConversationCellData *_conversation_comment; //顶部-评论
-
- TConversationCellData *_conversation_ctr; //风控管理员
- TConversationCellData *_conversation_goodsorder;
- TConversationCellData *_conversation_hostid;
-
- CGFloat _smallViewHeight;
- BOOL _stopTap;
- }
- @property(nonatomic,strong)UIView *bgView;
- @property(nonatomic,strong)UILabel *topTitleL;
- @property(nonatomic,strong)UIButton *topIgnoreBtn;
- @property(nonatomic,strong)UIButton *topLeftBtn;
- ///IM列表
- @property(nonatomic,strong)NSString *liveUid;
- @property (nonatomic, strong) UITableView *tableView;
- @property (nonatomic, strong) NSArray *data;
- ///C2C
- @property(nonatomic,strong)UIView *c2cBgView;
- @property(nonatomic,strong)MsgSysVC *c2cSysVC;
- @property(nonatomic,strong)TChatC2CController *c2cChatVC;
- @end
- @implementation YBImRoomSmallView
- - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch; {
- if ([touch.view isDescendantOfView:self.bgView]) {
- return NO;
- }
- return YES;
- }
- -(void)dissmissView {
- if (_stopTap) {
- [self endEditing:YES];
- [[NSNotificationCenter defaultCenter] postNotificationName:ybImSamllChange object:@(0)];
- [_c2cChatVC.inputController hideFaceAnimation];
- return;
- }
- if (_imSmallType == ImSmall_List && _c2cBgView.hidden == NO) {
- [self changeTopDesWithData:nil];
- }else{
- if (self.imCtrEvent) {
- self.imCtrEvent(ImCtr_Dismiss, @{});
- }
- [self removeNoti];
- }
- }
- +(instancetype)showImListWithLiveUid:(NSString *)liveuid;{
- YBImRoomSmallView *view = [[YBImRoomSmallView alloc]init];
- view.liveUid = liveuid;
- view.frame = CGRectMake(0, 0, _window_width, _window_height);
- [[YBBaseAppDelegate sharedAppDelegate].topViewController.view addSubview:view];
- [view createUI];
- return view;
- }
- -(void)createUI {
- UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(dissmissView)];
- tap.delegate = self;
- [self addGestureRecognizer:tap];
-
- _smallViewHeight = _window_height*0.45;
- [self addNoti];
- self.backgroundColor = RGB_COLOR(@"#000000", 0.1);
-
- _bgView = [[UIView alloc]init];
- _bgView.backgroundColor = UIColor.whiteColor;
- [self addSubview:_bgView];
- [_bgView mas_makeConstraints:^(MASConstraintMaker *make) {
- make.width.bottom.centerX.equalTo(self);
- make.height.mas_equalTo(_smallViewHeight+44);
- }];
-
- UIView *topNav = [[UIView alloc]init];
- [_bgView addSubview:topNav];
- [topNav mas_makeConstraints:^(MASConstraintMaker *make) {
- make.width.centerX.top.equalTo(_bgView);
- make.height.mas_equalTo(44);
- }];
- UILabel *topTitleL = [[UILabel alloc]init];
- topTitleL.text = YZMsg(@"消息");
- topTitleL.font = NaviTitle_Font;
- topTitleL.textColor = RGB_COLOR(@"#323232", 1);
- [topNav addSubview:topTitleL];
- self.topTitleL = topTitleL;
- [topTitleL mas_makeConstraints:^(MASConstraintMaker *make) {
- make.centerX.centerY.equalTo(topNav);
- }];
- UIButton *ignoreBtn = [UIButton buttonWithType:UIButtonTypeCustom];
- [ignoreBtn setTitle:YZMsg(@"忽略未读") forState:0];
- ignoreBtn.titleLabel.font = SYS_Font(13);
- [ignoreBtn setTitleColor:RGB_COLOR(@"#969696", 1) forState:0];
- [ignoreBtn addTarget:self action:@selector(clickIgnoreBtn) forControlEvents:UIControlEventTouchUpInside];
- [topNav addSubview:ignoreBtn];
- self.topIgnoreBtn = ignoreBtn;
- [ignoreBtn mas_makeConstraints:^(MASConstraintMaker *make) {
- make.height.centerY.equalTo(topNav);
- make.right.equalTo(topNav.mas_right).offset(-10);
- }];
- UIButton *leftBtn = [UIButton buttonWithType:UIButtonTypeCustom];
- [leftBtn setImage:[UIImage imageNamed:@"gray_back"] forState:0];
- [leftBtn addTarget:self action:@selector(clickLeftBtn) forControlEvents:UIControlEventTouchUpInside];
- [topNav addSubview:leftBtn];
- leftBtn.hidden = YES;
- self.topLeftBtn = leftBtn;
- [leftBtn mas_makeConstraints:^(MASConstraintMaker *make) {
- make.centerY.equalTo(topNav);
- make.width.height.mas_equalTo(40);
- make.left.equalTo(topNav.mas_left).offset(0);
- }];
-
- ///
- _data = [NSArray array];
- _imgListGroup = dispatch_group_create();
-
- _tableView = [[UITableView alloc] initWithFrame:CGRectZero];
- _tableView.tableFooterView = [[UIView alloc] init];
- _tableView.backgroundColor = UIColor.whiteColor;
- _tableView.delegate = self;
- _tableView.dataSource = self;
- _tableView.separatorStyle = 0;
- _tableView.showsVerticalScrollIndicator = NO;
- _tableView.contentInset = UIEdgeInsetsMake(0, 0, ShowDiff, 0);
- [_bgView addSubview:_tableView];
- [_tableView mas_makeConstraints:^(MASConstraintMaker *make) {
- make.top.equalTo(topNav.mas_bottom);
- make.width.centerX.bottom.equalTo(_bgView);
- }];
- if (@available(iOS 11.0,*)) {
- _tableView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;
- }
- if (@available(iOS 15.0, *)) {
- _tableView.sectionHeaderTopPadding = 0;
- }
-
- ///
- [_bgView addSubview:self.c2cBgView];
- [_c2cBgView mas_makeConstraints:^(MASConstraintMaker *make) {
- make.width.height.centerX.centerY.equalTo(_tableView);
- }];
- [_bgView layoutIfNeeded];
-
- }
- - (void)setImSmallType:(ImSmallType)imSmallType{
- _imSmallType = imSmallType;
- if (_imSmallType == ImSmall_List) {
- [self pullListData];
- }
- }
- -(void)changeTopDesWithData:(TConversationCellData*)cellData {
- if (cellData) {
- self.topTitleL.text = cellData.userName;
- self.topIgnoreBtn.hidden = YES;
- self.topLeftBtn.hidden = NO;
- _c2cBgView.hidden = NO;
- }else{
- self.topTitleL.text = YZMsg(@"消息");
- self.topIgnoreBtn.hidden = NO;
- self.topLeftBtn.hidden = YES;
- _c2cBgView.hidden = YES;
- _c2cSysVC.listModel = nil;
- [self destroyVCView];
- }
- }
- #pragma mark - IM列表开始
- -(void)clickLeftBtn {
- [self dissmissView];
- }
- -(void)pullListData {
- [self updateConversations];
- }
- -(void)clearUnreadNum {
- for (int i = 0; i < _data.count; i ++) {
- TConversationCellData *data = _data[i];
- data.unRead = 0;
- NSMutableArray *new_a = [NSMutableArray arrayWithArray:_data];
- [new_a replaceObjectAtIndex:i withObject:data];
- _data = [NSArray arrayWithArray:new_a];
- }
- [_tableView reloadData];
- }
- - (void)clickIgnoreBtn {
- int unread = 0;
- for (TConversationCellData *conversation in _data){
- unread += conversation.unRead;
- [[YBImManager shareInstance] clearUnreadConvId:conversation.convId sendNot:NO];
- }
- unread += _conversation_ctr.unRead;
- [[YBImManager shareInstance] clearUnreadConvId:_conversation_ctr.convId sendNot:NO];
- if (unread == 0) {
- [MBProgressHUD showPop:YZMsg(@"当前暂无未读消息")];
- }else {
- [MBProgressHUD showPop:YZMsg(@"已经忽略未读消息")];
- [self updateConversations];
- }
- }
- -(void)addNoti {
- [self removeNoti];
- NSNotificationCenter *notCenter = [NSNotificationCenter defaultCenter];
- // [notCenter addObserver:self selector:@selector(onRefreshConversations:) name:TUIKitNotification_TIMRefreshListener object:nil];
- [[V2TIMManager sharedInstance] addConversationListener:self];
- [notCenter addObserver:self selector:@selector(imInputHeightChange:) name:ybImSamllChange object:nil];
- }
- #pragma mark --消息监听
- - (void)onTotalUnreadMessageCountChanged:(UInt64)totalUnreadCount {
- [self updateConversations];
- }
- -(void)imInputHeightChange:(NSNotification *)not {
- CGFloat changeHeight = [not.object floatValue];
- _stopTap = NO;
- if (changeHeight>0) {
- _stopTap = YES;
- }
- [_bgView mas_remakeConstraints:^(MASConstraintMaker *make) {
- make.width.bottom.centerX.equalTo(self);
- make.height.mas_equalTo(_smallViewHeight+44+changeHeight);
- }];
- [_c2cBgView mas_remakeConstraints:^(MASConstraintMaker *make) {
- make.top.equalTo(_bgView.mas_top).offset(44);
- make.width.centerX.bottom.equalTo(_bgView);
- }];
- [_bgView layoutIfNeeded];
- [_c2cBgView layoutIfNeeded];
- NSLog(@"rk=========================rk_smallim:%f",changeHeight);
- _c2cChatVC.view.frame = CGRectMake(0, 0, _window_width, _smallViewHeight+changeHeight);
- [_c2cChatVC changeSmallHeight];
- }
- -(void)removeNoti {
- [[NSNotificationCenter defaultCenter] removeObserver:self];
- }
- - (void)dealloc {
- [self removeNoti];
- }
- - (void)onRefreshConversations:(NSNotification *)notification {
- //NSLog(@"xxxxxxokokokokokoko");
- [self updateConversations];
- }
- - (void)updateConversations{
- YBWeakSelf;
- [[YBImManager shareInstance]getAllConversationList:^(NSMutableArray *CovList, BOOL isSuccess) {
- if(isSuccess){
- dispatch_async(dispatch_get_main_queue(), ^{
- [weakSelf goReload:CovList];
- });
- }
- }];
- // [[YBImManager shareInstance] getLastDisplayStringWith:_imgListGroup finish:^(NSArray *transformArray) {
- // dispatch_async(dispatch_get_main_queue(), ^{
- // [weakSelf goReload:transformArray];
- // });
- // }];
- }
- -(void)goReload:(NSArray *)reloadA {
-
- NSSortDescriptor * sortDes = [NSSortDescriptor sortDescriptorWithKey:@"timestamp" ascending:NO];
- NSArray *sortResult = [reloadA sortedArrayUsingDescriptors:@[sortDes]];
- NSMutableArray *m_group_array = [NSMutableArray array];
- NSMutableArray *m_c2c_array = [NSMutableArray array];
- for (TConversationCellData *sortData in sortResult) {
- if(sortData.convType == TConv_Type_Group){
- [m_group_array addObject:sortData];
- }else if (sortData.convType == TConv_Type_C2C){
- NSString *imName = sortData.convId;
- if ([imName isEqual:@"dsp_admin_1"]) {
- //
- conver_admin1 = sortData;
- }else if ([imName isEqual:@"dsp_admin_2"]){
- //
- conver_admin2 = sortData;
- }else if ([imName isEqual:@"dsp_fans"]) {
- //粉丝
- _conversation_fans = sortData;
- }else if ([imName isEqual:@"dsp_like"]){
- //赞
- _conversation_zan = sortData;
- }else if ([imName isEqual:@"dsp_at"]){
- //@
- _conversation_at = sortData;
- }else if ([imName isEqual:@"dsp_comment"]){
- //评论
- _conversation_comment = sortData;
- }else if ([imName isEqual:@"dsp_admin_control"]){
- //风控管理员
- _conversation_ctr = sortData;
- }else if ([imName isEqual:@"goodsorder_admin"]){
- //订单管理员【未要求具体排序这里add即可】
- _conversation_goodsorder = sortData;
- }else if([imName containsString:@"dsp_user_"]){
- // dsp_user_live 【用于推送】
-
- }else if ([imName isEqual:_liveUid]){
- // 主播
- _conversation_hostid = sortData;
- }
- else{
- [m_c2c_array addObject:sortData];
- }
- }
- }
- // 检查dsp_admin_2 、主播是否缺失
- if (!conver_admin2) {
- conver_admin2 = [[YBImManager shareInstance] createEmptyCellDataWithId:@"dsp_admin_2"];
- }
- if (!_conversation_hostid && ![_liveUid isEqual:[Config getOwnID]]) {
- _conversation_hostid = [[YBImManager shareInstance] createEmptyCellDataWithId:_liveUid];
- }
- // 风控未读叠加到系统消息
- if (_conversation_ctr) {
- conver_admin2.unRead += _conversation_ctr.unRead;
- }
- [m_c2c_array insertObject:_conversation_hostid atIndex:0];
- [m_c2c_array insertObject:conver_admin2 atIndex:0];
-
- [self requestUserMessage:[m_c2c_array mutableCopy]];
- }
- - (void)requestUserMessage:(NSArray *)msgArray{
- NSString *uids = @"";
- for (TConversationCellData *data in msgArray) {
- uids = [uids stringByAppendingFormat:@"%@,",data.convId];
- }
- if (uids.length > 0) {
- //去掉最后一个逗号
- uids = [uids substringToIndex:[uids length] - 1];
- }
- NSMutableArray *m_array = [NSMutableArray array];
- [YBNetworking postWithUrl:[NSString stringWithFormat:@"User.getMultiInfo&uids=%@",uids] Dic:@{} Suc:^(int code, id info, NSString *msg) {
- if (code == 0) {
- for (int i = 0; i < [info count]; i ++) {
- NSDictionary *plantSubDic = info[i];
- for (TConversationCellData *data in msgArray) {
- if ([data.convId isEqual:strFormat([plantSubDic valueForKey:@"id"])]) {
- [data updateUserInfo:plantSubDic];
- [m_array addObject:data];
- }
- }
- }
- _data = [NSArray arrayWithArray:m_array];
- [_tableView reloadData];
- }
- } Fail:^(id fail) {
-
- }];
- }
- #pragma mark - Table view data source
- - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{
- return 1;
- }
- - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
- return _data.count;
- }
- - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
- return [TConversationCell getSize].height;
- }
- -(CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {
- return 0.0;
- }
- -(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {
- return nil;
- }
- - (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section{
- return 0;
- }
- - (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section{
- return nil;
- }
- - (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath{
- if (indexPath.row>1) {
- return YES;
- }
- return NO;
- }
- - (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath{
- return UITableViewCellEditingStyleDelete;
- }
- - (NSString *)tableView:(UITableView *)tableView titleForDeleteConfirmationButtonForRowAtIndexPath:(NSIndexPath *)indexPath{
- return YZMsg(@"删除");
- }
- - (BOOL)tableView:(UITableView *)tableView shouldIndentWhileEditingRowAtIndexPath:(NSIndexPath *)indexPath{
- return NO;
- }
- - (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath{
- TConversationCellData *conv = _data[indexPath.row];
- NSMutableArray *new_a = [NSMutableArray arrayWithArray:_data];
- [new_a removeObjectAtIndex:indexPath.row];
- _data = [NSArray arrayWithArray:new_a];
- [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObjects:indexPath, nil] withRowAnimation:UITableViewRowAnimationNone];
-
- [[YBImManager shareInstance]clearUnreadConvId:conv.convId sendNot:YES];
- NSString *userid = [NSString stringWithFormat:@"c2c_%@",conv.convId];
- [[V2TIMManager sharedInstance] deleteConversation:userid succ:^{
- NSLog(@"success");
- } fail:^(int code, NSString *desc) {
- NSLog(@"failure, code:%d, desc:%@", code, desc);
- }];
- // dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.3 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
- // [[NSNotificationCenter defaultCenter] postNotificationName:TUIKitNotification_TIMCancelunread object:nil];
- // });
- }
- - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
- [tableView deselectRowAtIndexPath:indexPath animated:NO];
- TConversationCellData *conversation = [_data objectAtIndex:indexPath.row];
- [self goChatWithC2CWithConv:conversation];
- }
- - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
- TConversationCell *cell = [tableView dequeueReusableCellWithIdentifier:TConversationCell_ReuseId];
- if(!cell){
- cell = [[TConversationCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:TConversationCell_ReuseId];
- }
- TConversationCellData *celldata =[_data objectAtIndex:indexPath.row];
- // 改变UI
- [cell imsmallViewResetUI];
- [cell setData:celldata];
- [cell checkImRecordWithHostid:_liveUid];
- return cell;
- }
- - (UIModalPresentationStyle)adaptivePresentationStyleForPresentationController:(UIPresentationController *)controller {
- return UIModalPresentationNone;
- }
- #pragma mark - IM列表结束
- #pragma mark - IM C2C 开始
- -(void)goChatWithC2CWithConv:(TConversationCellData *)conversation {
- [self destroyVCView];
- // 改变标题
- [self changeTopDesWithData:conversation];
-
- [[YBImManager shareInstance] clearUnreadConvId:conversation.convId sendNot:YES];
- if ([conversation.convId isEqual:@"dsp_admin_1"]||[conversation.convId isEqual:@"dsp_admin_2"]) {
- if ([conversation.convId isEqual:@"dsp_admin_2"]) {
- [[YBImManager shareInstance] clearUnreadConvId:_conversation_ctr.convId sendNot:NO];
- }
- NSMutableDictionary *dic = [NSMutableDictionary dictionary];
- [dic setObject:conversation.userHeader forKey:@"avatar"];
- [dic setObject:conversation.convId forKey:@"id"];
- [dic setObject:conversation.userName forKey:@"user_nickname"];
- //[dic setObject:conversation.lastConv forKey:@"conversation"];
- MessageListModel *model = [MessageListModel modelWithDic:dic];
-
- [_c2cBgView addSubview:[self c2cSysView]];
- _c2cSysVC.view.frame = CGRectMake(0, 0, _window_width, _smallViewHeight);
- _c2cSysVC.listModel = model;
- [_c2cSysVC imSmallViewReload];
- }
- else{
- [_c2cBgView addSubview:[self c2cChatView]];
- _c2cChatVC.view.frame = CGRectMake(0, 0, _window_width, _smallViewHeight);
- _c2cChatVC.conversation = conversation;
- [_c2cChatVC imSmallViewReload];
- }
-
- }
- -(void)destroyVCView {
- if (_c2cSysVC) {
- [_c2cSysVC.view removeFromSuperview];
- _c2cSysVC = nil;
- }
- if (_c2cChatVC) {
- [_c2cChatVC.view removeFromSuperview];
- _c2cChatVC = nil;
- }
- }
- - (UIView *)c2cBgView{
- if (!_c2cBgView) {
- _c2cBgView = [[UIView alloc]init];
- _c2cBgView.backgroundColor = UIColor.whiteColor;
- _c2cBgView.hidden = YES;
- }
- return _c2cBgView;
- }
- - (UIView *)c2cSysView {
- if (!_c2cSysVC) {
- _c2cSysVC = [[MsgSysVC alloc]init];
- _c2cSysVC.uiFrom = UiFrom_Samll;
- _c2cSysVC.isWhiteStyle = YES;
- }
- return _c2cSysVC.view;
- }
- - (UIView *)c2cChatView{
- if (!_c2cChatVC) {
- _c2cChatVC = [[TChatC2CController alloc]init];
- _c2cChatVC.uiFrom = UiFrom_Samll;
- }
- return _c2cChatVC.view;
- }
- #pragma mark - IM C2C 结束
- @end
|