// // ConversationVC.m // jitao // // Created by 罗云飞 on 2017/9/14. // Copyright © 2017年 罗云飞. All rights reserved. // #import "ConversationVC.h" #import "EaseUsersListViewController.h" #import "YCBaseTableViewCell.h" #import "MessagecurrencyCell.h" #import "SystemmessageViewController.h"//系统消息 #import "JTRecommendViewController.h"//技淘智推 #import "OpenUDID.h" #import "TaoXinModel.h" #import "StewardshipOnlineCell.h" #import "EaseMessageViewController.h" #import "MSUMessageChatController.h" @interface ConversationVC (){ NSArray *arrConversations; } @end @implementation ConversationVC - (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; [self getAllConversations]; //获取所有的会话 [self tableViewDidTriggerHeaderRefresh]; } //获取所有的会话 - (void)getAllConversations { arrConversations = [[EMClient sharedClient].chatManager getAllConversations]; [self.tableView reloadData]; } - (void)userAccountDidLoginFromOtherDevice{ NSLog(@"%@",@"环信在其他地方登录,请重新登录"); } - (void)viewDidLoad { [super viewDidLoad]; if ([EMClient sharedClient].isConnected) { NSLog(@"环信连接成功"); }else{ NSLog(@"环信登录失效"); } [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(UserinfoNotificationMethod) name:@"环信登录成功" object:nil]; self.navigationController.navigationBar.barTintColor = [UIColor whiteColor]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(tuisongManageNotification:) name:NewtuisongManageNotification object:nil]; [self setTitle:@"客服"]; self.tableView.separatorStyle = NO; self.delegate = self; self.dataSource = self; self.showRefreshHeader = YES; [self tableViewDidTriggerHeaderRefresh]; [self refreshAndSortView];//刷新内存中的消息 [[EMClient sharedClient].chatManager addDelegate:self delegateQueue:nil]; NSLog(@"%ld",arrConversations.count); } - (void)tuisongManageNotification:(NSNotification *)notication { if ([notication.object isEqualToString:@"1"]) { JTRecommendViewController*vc = [[JTRecommendViewController alloc] init]; vc.hidesBottomBarWhenPushed = YES; NewPushViewController(vc); }else if([notication.object isEqualToString:@"0"]){ SystemmessageViewController *vc = [[SystemmessageViewController alloc] init]; vc.hidesBottomBarWhenPushed = YES; NewPushViewController(vc); } } #pragma mark --------APP启动时候自动登录通知刷新会话列表------------ - (void)UserinfoNotificationMethod{ [self tableViewDidTriggerHeaderRefresh]; } // 收到消息回调 - (void)didReceiveMessages:(NSArray *)aMessages { [self tableViewDidTriggerHeaderRefresh]; } #pragma mark - Table view data source - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { // Return the number of sections. return 1; } - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { // Return the number of rows in the section. return [self.dataArray count]+2; } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *cellIdentifier = @"CELL"; static NSString *messageCell = @"systemmessageCell"; static NSString *messageCell1 = @"systemmessageCell1"; // if (indexPath.row == 0) { // MessagecurrencyCell *cell = [tableView dequeueReusableCellWithIdentifier:messageCell]; // if (cell == nil) { // cell = [[MessagecurrencyCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:messageCell]; // } // [cell setSelectionStyle:UITableViewCellSelectionStyleNone];//(这种是没有点击后的阴影效果) // cell.accessoryType = UITableViewCellAccessoryNone; // [cell.image setImage:[UIImage imageNamed:@"系统消息(淘信)"]]; // [cell.title setText:@"系统消息"]; // if (self.systemArray.count>0) { // TaoXinModel *model = self.systemArray[0]; // cell.time.text = model.sysMessageDate; // if ([model.sysMessageUnRead integerValue] >99) { // cell.corner.hidden = NO; // cell.corner.text = @"N+"; // cell.corner.backgroundColor = NewRedColor; // }else{ // if ([model.sysMessageUnRead integerValue] == 0) { // cell.corner.hidden = YES; // cell.title.sd_layout.topSpaceToView(cell.contentView, (cell.height-14)/2); // cell.corner.backgroundColor = NewClearColor; // }else{ // cell.corner.hidden = NO; // cell.corner.text = model.sysMessageUnRead; // cell.corner.backgroundColor = NewRedColor; // } // } // cell.content.text = model.sysMessageTitle; // } // return cell; // }else if (indexPath.row == 0){ MessagecurrencyCell *cell = [tableView dequeueReusableCellWithIdentifier:messageCell1]; if (cell == nil) { cell = [[MessagecurrencyCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:messageCell1]; } [cell setSelectionStyle:UITableViewCellSelectionStyleNone];//(这种是没有点击后的阴影效果) cell.accessoryType = UITableViewCellAccessoryNone; [cell.image setImage:[UIImage imageNamed:@"技淘智推"]]; [cell.title setText:@"智能匹配"]; if (self.systemArray.count>0) { TaoXinModel *model = self.systemArray[0]; cell.time.text = model.recMessageDate; if ([model.recMessageUnRead integerValue] >99) { cell.corner.hidden = NO; cell.corner.text = @"N+"; cell.corner.backgroundColor = NewRedColor; }else{ if ([model.recMessageUnRead integerValue] == 0) { cell.corner.hidden = YES; cell.title.sd_layout.topSpaceToView(cell.contentView, (cell.height-14)/2); cell.corner.backgroundColor = NewClearColor; }else{ cell.corner.hidden = NO; cell.corner.text = model.recMessageUnRead; cell.corner.backgroundColor = NewRedColor; } } cell.content.text = model.recMessageTitle; } return cell; }else if(indexPath.row == 1){ StewardshipOnlineCell *cell = [tableView dequeueReusableCellWithIdentifier:messageCell1]; if (cell == nil) { cell = [[StewardshipOnlineCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:messageCell1]; } [cell setSelectionStyle:UITableViewCellSelectionStyleNone];//(这种是没有点击后的阴影效果) cell.accessoryType = UITableViewCellAccessoryNone; [cell.headimage setImage:NewImageNamed(@"管家在线")]; cell.title.text = @"客服在线"; return cell; }else{ YCBaseTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier]; if (cell == nil) { cell = [[YCBaseTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier]; } [cell setSelectionStyle:UITableViewCellSelectionStyleNone];//(这种是没有点击后的阴影效果) cell.accessoryType = UITableViewCellAccessoryNone; id model = [self.dataArray objectAtIndex:indexPath.row-2]; cell.newmodel = model; if (self && [self respondsToSelector:@selector(conversationListViewController:latestMessageTitleForConversationModel:)]) { NSMutableAttributedString *attributedText = [[self conversationListViewController:self latestMessageTitleForConversationModel:model] mutableCopy]; [attributedText addAttributes:@{NSFontAttributeName : cell.detailLabel.font} range:NSMakeRange(0, attributedText.length)]; cell.detailLabel.attributedText = attributedText; } else { cell.detailLabel.attributedText = [[EaseEmotionEscape sharedInstance] attStringFromTextForChatting:[self _latestMessageTitleForConversationModel:model]textFont:cell.detailLabel.font]; } if (self && [self respondsToSelector:@selector(conversationListViewController:latestMessageTimeForConversationModel:)]) { cell.timeLabel.text = [self conversationListViewController:self latestMessageTimeForConversationModel:model]; } else { cell.timeLabel.text = [self _latestMessageTimeForConversationModel:model]; } cell.titleLabel.font = NewFont(fitScreenWidth(15)); cell.avatarView.imageView.sd_layout .heightIs(fitScreenWidth(44)) .widthIs(fitScreenWidth(44)); cell.avatarView.imageCornerRadius = fitScreenWidth(44)/2;//头像圆角 return cell; } } - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { [tableView deselectRowAtIndexPath:indexPath animated:YES]; // if (indexPath.row == 0) { // SystemmessageViewController *vc = [[SystemmessageViewController alloc] init]; // vc.hidesBottomBarWhenPushed = YES; // NewPushViewController(vc); // }else if (indexPath.row == 0){ if ([UserHelper isLogin]) { NSLog(@"%@",@"已登录"); JTRecommendViewController*vc = [[JTRecommendViewController alloc] init]; vc.hidesBottomBarWhenPushed = YES; NewPushViewController(vc); }else{ NSLog(@"%@",@"未登录"); NewLoginViewController *vc = [[NewLoginViewController alloc] init]; [vc setLoginSuccess:^(NSString *string) { [self tableViewDidTriggerHeaderRefresh]; NewPopViewController; }]; NewPushViewController(vc); } }else if(indexPath.row == 1){ if ([UserHelper isLogin]) { NSLog(@"%@",@"已登录"); EaseMessageViewController *viewController = [[EaseMessageViewController alloc] initWithConversationChatter:HXKF conversationType:0]; viewController.title = @"客服在线"; viewController.hidesBottomBarWhenPushed = YES; [[NSNotificationCenter defaultCenter]postNotificationName:@"环信登录成功" object:nil]; [self.navigationController pushViewController:viewController animated:YES]; }else{ NSLog(@"%@",@"未登录"); NewLoginViewController *vc = [[NewLoginViewController alloc] init]; [vc setLoginSuccess:^(NSString *string) { NewPopViewController; }]; NewPushViewController(vc); } }else{ if (self && [self respondsToSelector:@selector(conversationListViewController:didSelectConversationModel:)]) { EaseConversationModel *model = [self.dataArray objectAtIndex:indexPath.row-2]; [self conversationListViewController:self didSelectConversationModel:model]; } else { EaseConversationModel *model = [self.dataArray objectAtIndex:indexPath.row-2]; MSUMessageChatController *viewController = [[MSUMessageChatController alloc] initWithConversationChatter:model.conversation.conversationId conversationType:0]; if ([model.conversation.conversationId isEqualToString:HXKF]) { viewController.title = @"客服在线"; }else{ viewController.title = model.title; } viewController.hidesBottomBarWhenPushed = YES; [self.navigationController pushViewController:viewController animated:YES]; } } } /*! @method @brief 获取会话最近一条消息时间 @discussion @param conversationModel 会话model @result 返回传入会话model最近一条消息时间 */ - (NSString *)_latestMessageTimeForConversationModel:(id)conversationModel { NSString *latestMessageTime = @""; EMMessage *lastMessage = [conversationModel.conversation latestMessage];; if (lastMessage) { double timeInterval = lastMessage.timestamp ; if(timeInterval > 140000000000) { timeInterval = timeInterval / 1000; } NSDateFormatter* formatter = [[NSDateFormatter alloc]init]; [formatter setDateFormat:@"YYYY-MM-dd"]; latestMessageTime = [formatter stringFromDate:[NSDate dateWithTimeIntervalSince1970:timeInterval]]; } return latestMessageTime; } #pragma mark - private /*! @method @brief 获取会话最近一条消息内容提示 @discussion @param conversationModel 会话model @result 返回传入会话model最近一条消息提示 */ - (NSString *)_latestMessageTitleForConversationModel:(id)conversationModel { NSString *latestMessageTitle = @""; EMMessage *lastMessage = [conversationModel.conversation latestMessage]; if (lastMessage) { EMMessageBody *messageBody = lastMessage.body; switch (messageBody.type) { case EMMessageBodyTypeImage:{ latestMessageTitle = NSEaseLocalizedString(@"[图片]", @"[image]"); } break; case EMMessageBodyTypeText:{ NSString *didReceiveText = [EaseConvertToCommonEmoticonsHelper convertToSystemEmoticons:((EMTextMessageBody *)messageBody).text]; latestMessageTitle = didReceiveText; } break; case EMMessageBodyTypeVoice:{ latestMessageTitle = NSEaseLocalizedString(@"[语音]", @"[voice]"); } break; case EMMessageBodyTypeLocation: { latestMessageTitle = NSEaseLocalizedString(@"[位置]", @"[location]"); } break; case EMMessageBodyTypeVideo: { latestMessageTitle = NSEaseLocalizedString(@"[视频]", @"[video]"); } break; case EMMessageBodyTypeFile: { latestMessageTitle = NSEaseLocalizedString(@"[文件]", @"[file]"); } break; default: { } break; } } return latestMessageTitle; } - (id)conversationListViewController:(EaseConversationListViewController *)conversationListViewController modelForConversation:(EMConversation *)conversation{ EaseConversationModel *model = [[EaseConversationModel alloc] initWithConversation:conversation]; if (model.conversation.type == EMConversationTypeChat) { NSDictionary *dic = conversation.lastReceivedMessage.ext; if(dic[@"nickname"] == nil || dic[@"avatar"] == nil){ //头像占位图 model.avatarImage = [UIImage imageNamed:@"通用用户"]; }else{ model.title = dic[@"nickname"]; model.avatarURLPath = dic[@"avatar"]; //头像占位图 model.avatarImage = [UIImage imageNamed:@"通用用户"]; } } else if (model.conversation.type == EMConversationTypeGroupChat) { NSString *imageName = @"groupPublicHeader"; if (![conversation.ext objectForKey:@"subject"]) { NSArray *groupArray = [[EMClient sharedClient].groupManager getJoinedGroups]; for (EMGroup *group in groupArray) { if ([group.groupId isEqualToString:conversation.conversationId]) { NSMutableDictionary *ext = [NSMutableDictionary dictionaryWithDictionary:conversation.ext]; [ext setObject:group.subject forKey:@"subject"]; [ext setObject:[NSNumber numberWithBool:group.isPublic] forKey:@"isPublic"]; conversation.ext = ext; break; } } } NSDictionary *ext = conversation.ext; model.title = [ext objectForKey:@"subject"]; imageName = [[ext objectForKey:@"isPublic"] boolValue] ? @"groupPublicHeader" : @"groupPrivateHeader"; model.avatarImage = [UIImage imageNamed:imageName]; //头像占位图 model.avatarImage = [UIImage imageNamed:@"logo"]; } return model; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } /* #pragma mark - Navigation // In a storyboard-based application, you will often want to do a little preparation before navigation - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { // Get the new view controller using [segue destinationViewController]. // Pass the selected object to the new view controller. } */ @end