// JXMsgViewController.m // // Created by flyeagleTang on 14-4-3. // Copyright (c) 2014年 Reese. All rights reserved. // #import "JXMsgViewController.h" #import "JXChatViewController.h" #import "JXChatViewC.h"// #import "AppDelegate.h" #import "JXLabel.h" #import "JXImageView.h" #import "JXCell.h" #import "JXRoomPool.h" #import "JXRoomObject.h" #import "JXTableView.h" #import "JXFriendObject.h" #import "inputPhoneVC.h" #import "inputPwdVC.h" #import "loginVC.h" #import "WeiboViewControlle.h" #import "addMsgVC.h" #import "JXNewFriendViewController.h" #import "JXUserInfoVC.h" #import "JXRoomObject.h" #import "JXRoomRemind.h" #import "FMDatabase.h" #import "JXGroupViewController.h" #import "JXSearchUserVC.h" #import "JXNearVC.h" #import "JXRoomMemberVC.h" #import "JXTabMenuView.h" #import "JXScanQRViewController.h" #import #import "JX_DownListView.h" #import "JXNewRoomVC.h" #import "JXSynTask.h" #import "JXSearchVC.h" #ifdef Live_Version #import "JXLiveJidManager.h" #endif #import "JXPayViewController.h" #import "JXTransferNoticeVC.h" #import "JXFaceCreateRoomVC.h" #import "JXSecurityUtil.h" #import "MD5Util.h" #import "CYWebCustomerServiceVC.h" #import "STAlertView.h" #import "webpageVC.h" #import "JXSelectFriendsVC.h" #import "JXFriendViewController.h" #import "JXAddrBookFriendVc.h" #import "JXCsHomeVc.h" #import "UIBarButtonItem+XMGExtension.h" #import "JXTHomeMessageCell.h" #import "UIView+LK.h" #import "CYWebAddPointVC.h" #import "JXXMMainVc.h" #import "JXCustomerChatListVc.h" #import "JXMsgCellView.h" #import "JXMessShowView.h" #import "SaveOrReadArr.h" #import "JXProgressVC.h" #import "chatListModel.h" #import "YPTabBarController.h" #import "JXShadeShowView.h" @interface JXMsgViewController () @property (nonatomic,weak) JXMsgCellView *cellView; @property (nonatomic, strong) UITextField *seekTextField; @property (nonatomic, strong) NSMutableArray *searchArray; @property (nonatomic, assign) BOOL dalayAction; @property (nonatomic, assign) int topNum; @property (nonatomic, strong) UIButton *moreBtn; @property (nonatomic, strong) UIButton *editBtn; @property (nonatomic, strong) UIButton *doneBtn; @property (nonatomic, strong) JXRoomRemind *roomRemind; @property (nonatomic, strong) UIActivityIndicatorView *activity; @property (nonatomic, strong) NSMutableArray *taskArray; @property (nonatomic, assign) int replayNum; @property (nonatomic, assign) NSInteger indexGound; @property (nonatomic, assign) int indexNums; @property (nonatomic, strong) NSMutableArray *tempGoundArr; @property (nonatomic, strong) NSMutableArray *indexGoundArr; @property (nonatomic, strong) JXMessageObject *repalyMsg; @property (nonatomic, strong) NSString *lastMsgInput; @property (nonatomic, strong) NSString *replayRoomId; @property (nonatomic, strong) JXInputRectView *inputRectView; @property (nonatomic, strong) STAlertView *alert; @property (nonatomic, assign) BOOL isEdit; @property (nonatomic, assign) BOOL isLoadingData; @property (nonatomic, strong) JXMsgAndUserObject *tempMsgAndUserObject; @property (nonatomic,strong) NSMutableArray *dataArr; @property (nonatomic,copy) NSString *strCount; @property (nonatomic,strong) JXCsHomeVc *homeTipVc; @property (nonatomic,weak) UIView *titlesView; @property (nonatomic,weak) UIView *indicatorView; @property (nonatomic,weak) UIButton *button_n; @property (nonatomic,weak) UIButton *selectedButton; @property (nonatomic,weak) UILabel *countTipL; @property (nonatomic,strong) CYWebAddPointVC *webAddPointV; @property (nonatomic,strong) JXCsHomeVc *homeVc; @property (nonatomic,strong) NSIndexPath *indexPathRecord; @property (nonatomic,weak) JXMessShowView *showLogView; @property (nonatomic, assign) BOOL iskeFugongzong; @property (nonatomic, assign) int isRecordkeFugongzong; // 是否获取到了最近消息列表 @property (nonatomic, assign) BOOL isGetLastMsgList; @end @implementation JXMsgViewController - (void)scrollToPageUp { [self performSelector:@selector(stopLoading) withObject:nil afterDelay:1.0]; } - (id)init { self = [super init]; if (self) { self.heightHeader = 0; self.heightFooter = JX_SCREEN_BOTTOM; //self.view.frame = CGRectMake(0, 0, JX_SCREEN_WIDTH, JX_SCREEN_HEIGHT-JX_SCREEN_BOTTOM); self.isGotoBack=NO; [self createHeadAndFoot]; [self onLoginChanged:nil]; _homeVc= [JXCsHomeVc new]; _searchArray = [NSMutableArray array]; _taskArray = [NSMutableArray array]; _indexGoundArr = [NSMutableArray array]; _dataArrOneOne = [NSMutableArray array]; _tempGoundArr = [NSMutableArray array]; _array = [NSMutableArray array]; // enumerateObjectsUsingBlock _webAddPointV=[CYWebAddPointVC new]; _isRecordkeFugongzong=0; _indexNums=0; _isGetLastMsgList = NO; dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ // [g_notify addObserver:self selector:@selector(newFriend:) name:kXMPPNewFriendNotifaction object:nil]; // [g_notify addObserver:self selector:@selector(newRequest:) name:kXMPPNewRequestNotifaction object:nil]; [g_notify addObserver:self selector:@selector(showAD) name:kLaunchAdShowFinishNotifaction object:nil]; [g_notify addObserver:self selector:@selector(allMsgCome) name:kXMPPAllMsgNotifaction object:nil];//收到了所有消息,一次性刷新 [g_notify addObserver:self selector:@selector(newMsgCome:) name:kXMPPNewMsgNotifaction object:nil];//收到了一条新消息 [g_notify addObserver:self selector:@selector(newMsgSend:) name:kXMPPMyLastSendNotifaction object:nil];//发送了一条消息 [g_notify addObserver:self selector:@selector(newRequest:) name:kXMPPNewRequestNotifaction object:nil];//收到了一个好友验证类消息 [g_notify addObserver:self selector:@selector(onLoginChanged:) name:kXmppLoginNotifaction object:nil];//登录状态变化了 [g_notify addObserver:self selector:@selector(delFriend:) name:kDeleteUserNotifaction object:nil];//删除了一个好友 [g_notify addObserver:self selector:@selector(onReceiveRoomRemind:) name:kXMPPRoomNotifaction object:nil];//收到了群控制消息 [g_notify addObserver:self selector:@selector(onQuitRoom:) name:kQuitRoomNotifaction object:nil];//退出了房间 // 清除全部聊天记录 [g_notify addObserver:self selector:@selector(delAllChatLogNotifi:) name:kDeleteAllChatLog object:nil]; [g_notify addObserver:self selector:@selector(chatViewDisappear:) name:kChatViewDisappear object:nil]; [g_notify addObserver:self selector:@selector(logoutNotifi:) name:kSystemLogoutNotifaction object:nil]; // 撤回消息 [g_notify addObserver:self selector:@selector(withdrawNotifi:) name:kXMPPMessageWithdrawNotification object:nil]; // 更改备注名 [g_notify addObserver:self selector:@selector(friendRemarkNotif:) name:kFriendRemark object:nil]; // 进入前台 [g_notify addObserver:self selector:@selector(appEnterForegroundNotif:) name:kApplicationWillEnterForeground object:nil]; [g_notify addObserver:self selector:@selector(friendPassNotif:) name:kFriendPassNotif object:nil]; [g_notify addObserver:self selector:@selector(getServerData) name:kOfflineOperationUpdateUserSet object:nil]; [g_notify addObserver:self selector:@selector(updateRoomHead:) name:@"updateRoomHead" object:nil]; [g_notify addObserver:self selector:@selector(closeShow) name:@"closeShowxxx" object:nil]; }); [g_server customerLinkList:self]; [self setupCustomerLinkList]; // 加载所有群 [self getLastChatList]; [self getFriend]; [self getMembershipAccount_ID]; upOrDown = 0; if (JX_SCREEN_HEIGHT>=812) { _table.frame=CGRectMake(0, 70, JX_SCREEN_WIDTH, JX_SCREEN_HEIGHT-70); }else if (JX_SCREEN_WIDTH>=414 && JX_SCREEN_HEIGHT<812){ _table.frame=CGRectMake(0, 70, JX_SCREEN_WIDTH, JX_SCREEN_HEIGHT-JX_SCREEN_BOTTOM-20); }else{ _table.frame=CGRectMake(0, 70, JX_SCREEN_WIDTH, JX_SCREEN_HEIGHT-70); } // _table.frame =CGRectMake(0, 0, JX_SCREEN_WIDTH, JX_SCREEN_HEIGHT-(JX_SCREEN_HEIGHT>=812?88:64)-JX_SCREEN_BOTTOM); } return self; } - (void)getMembershipAccount_ID { [g_server getUser:MY_USER_ID toView:self]; } - (void)getAllChatList { // [g_server listRoom:_page roomName:nil toView:self]; [g_server listHisRoom:_page pageSize:1000 toView:self]; } //-(void)newRequest:(NSNotification *)notifacation //{ // [self getFriend]; //} - (void)showAD { [g_server getAdvertisingToView:self]; } - (void)updateRoomHead:(NSNotification *)notification { // NSDictionary *groupDict = notification.object; // // NSMutableArray *array; // if (_seekTextField.text.length > 0) { // array = _searchArray; // }else { // array = _array; // } // NSString *roomjid = [NSString stringWithFormat:@"%@",[groupDict objectForKey:@"roomJid"]]; // NSInteger index = 0; // for (JXMsgAndUserObject * dict in array) { // if ([dict.user.userId intValue] == [roomjid intValue]) { // index = [array indexOfObject:dict]; // } // } // JXCell *cell = [_table cellForRowAtIndexPath:[NSIndexPath indexPathForRow:index inSection:0]]; // cell.headImageView.image = [UIImage imageNamed:@"shiku_transfer"]; // // [self.tableView reloadData]; } -(void)dealloc{ [g_notify removeObserver:self]; [[NSUserDefaults standardUserDefaults] removeObjectForKey:@"guangbo"]; [_array removeAllObjects]; } - (void)viewWillDisappear:(BOOL)animated{ [super viewWillDisappear:animated]; [self.navigationController setNavigationBarHidden:NO animated:NO]; } - (void)viewDidLoad { [super viewDidLoad]; _table.backgroundColor=kRGBColor250; self.view.backgroundColor=kRGBColor250; [self customView]; [self navGuese]; [g_notify addObserver:self selector:@selector(onQuitRoom:) name:kQuitRoomNotifaction object:nil];//退出了房间 [self getServerData]; // self.tableView.contentInset=UIEdgeInsetsMake(64, 0, 20, 0); [g_server listAttention:50 userId:MY_USER_ID toView:self]; [g_server listHisRoom:_page pageSize:50 toView:self]; _dataArr=[NSMutableArray array]; NSArray *titleIMGs=@[@{@"jx_img":@"FriendsNew",@"name":@"新的朋友"}, @{@"jx_img":@"qunliaoNew",@"name":@"群聊"}, @{@"jx_img":@"tongxunlu",@"name":@"通讯录"} , @{@"jx_img":@"ALOGO_1200",@"name":@"即信"}]; _dataArr=[JXTMessageModel mj_objectArrayWithKeyValuesArray:titleIMGs]; } - (void)viewDidAppear:(BOOL)animated{ [super viewDidAppear:animated]; [self getTotalNewMsgCount]; // NSMutableArray* p = [[JXMessageObject sharedInstance] fetchRecentChat]; // // [_array addObjectsFromArray:p]; // [_table reloadData]; // [UIView animateWithDuration:0.4 animations:^{ // self.view.frame = CGRectMake(0, 0, JX_SCREEN_WIDTH, JX_SCREEN_HEIGHT); // }];_reciveNewMessage // [_array enumerateObjectsUsingBlock:^(JXMsgAndUserObject *_Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { // _reciveNewMessage2222=0; // NSLog(@".message.isGroup %d",obj.message.isGroup); // // JXMessageObject *msgUse=obj.message; // long time = (long)[[NSDate date] timeIntervalSince1970]; // time = (time *1000 + g_server.timeDifference); // NSString *salt = [NSString stringWithFormat:@"%ld", time]; //// [g_server Useract_getGroupOneType:salt jid:msgUse.fromUserId andToView:self]; // // // [g_server getact_act_act_getGroupListType:salt andToView:self]; // // // }]; } - (void)onRelease { NSMutableArray *array; if (_seekTextField.text.length > 0) { array = _searchArray; }else { array = _array; } JXMsgAndUserObject * dict = (JXMsgAndUserObject*) [array objectAtIndex:self.replayNum]; if (dict.user.roomId.length > 0) { [g_server roomGetRoom:self.replayRoomId toView:self]; }else { [self sendIt]; } } - (void)appEnterForegroundNotif:(NSNotification *)notif { } - (void)friendPassNotif:(NSNotification *)notif { JXFriendObject *user = notif.object; // [g_server getUser:user.userId toView:self]; } - (void) customView { self.backView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, JX_SCREEN_WIDTH, 50+20)]; _backView.backgroundColor = HEXCOLOR(0xf0f0f0); [self.view addSubview:self.backView]; _seekTextField = [[UITextField alloc] initWithFrame:CGRectMake(15, 10, self.backView.frame.size.width - 30, 30)]; _seekTextField.placeholder = [NSString stringWithFormat:@"%@", @"(搜索即信号或手机号)"]; _seekTextField.backgroundColor = [UIColor whiteColor]; _seekTextField.textColor = [UIColor blackColor]; [_seekTextField setFont:SYSFONT(14)]; // _seekTextField.backgroundColor = [UIColor whiteColor]; UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"card_search"]]; UIView *leftView = [[UIView alloc ]initWithFrame:CGRectMake(0, 0, 30, 30)]; imageView.center = leftView.center; [leftView addSubview:imageView]; _seekTextField.leftView = leftView; _seekTextField.clearButtonMode = UITextFieldViewModeWhileEditing; _seekTextField.leftViewMode = UITextFieldViewModeAlways; _seekTextField.borderStyle = UITextBorderStyleNone; _seekTextField.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter; _seekTextField.delegate = self; _seekTextField.returnKeyType = UIReturnKeyGoogle; [self.backView addSubview:_seekTextField]; [_seekTextField addTarget:self action:@selector(textFieldDidChange:) forControlEvents:UIControlEventEditingChanged]; UILabel *titleLb=[[UILabel alloc]init]; titleLb.frame=CGRectMake(0, CGRectGetMaxY(_seekTextField.frame)+10,self.backView.frame.size.width , 12); titleLb.textAlignment=NSTextAlignmentCenter; titleLb.font=[UIFont systemFontOfSize:12 weight:UIFontWeightRegular]; NSString *membershipAccount= [[NSUserDefaults standardUserDefaults] objectForKey:@"membershipAccount_ID"]; titleLb.text=[NSString stringWithFormat:@"我的即信号:%@",membershipAccount]; [self.backView addSubview:titleLb]; self.titleLb=titleLb; JXMsgCellView *cellView=[JXMsgCellView XIBMsgCellView]; // self.cellView=cellView; cellView.frame=CGRectMake(0, 0, JX_SCREEN_WIDTH, 290); self.tableView.tableHeaderView = cellView; cellView.autoresizingMask=UIViewAutoresizingNone; cellView.blockTap = ^(NSInteger tag) { if (tag==0) { JXMsgAndUserObject* newobj = [[JXMsgAndUserObject alloc]init]; newobj.user = [[JXUserObject sharedInstance] getUserById:FRIEND_CENTER_USERID]; newobj.message = [[JXMessageObject alloc] init]; newobj.message.toUserId = FRIEND_CENTER_USERID; newobj.user.msgsNew = [NSNumber numberWithInt:0]; [newobj.message updateNewMsgsTo0]; NSArray *friends = [[JXFriendObject sharedInstance] fetchAllFriendsFromLocal]; for (NSInteger i = 0; i < friends.count; i ++) { JXFriendObject *friend = friends[i]; if ([friend.msgsNew integerValue] > 0) { [friend updateNewMsgUserId:friend.userId num:0]; [friend updateNewFriendLastContent]; } } [[NSUserDefaults standardUserDefaults] setObject:@"tipLabelStr" forKey:@"tipLabelStr"]; [[NSUserDefaults standardUserDefaults] synchronize]; cellView.hiddenTipl=@"xxxxx"; [g_notify postNotificationName:@"hiddenTip" object:nil]; // self.cellView.tipLabel.hidden=YES; JXNewFriendViewController *vc=[JXNewFriendViewController new]; [g_navigation pushViewController:vc animated:YES]; }else if(tag==1){ JXGroupViewController *vc=[JXGroupViewController new]; [g_navigation pushViewController:vc animated:YES]; //[g_notify postNotificationName:@"newFriend" object:nil userInfo:@{@"use":_user}]; }else if(tag==2){ JXAddrBookFriendVc *vc=[JXAddrBookFriendVc new]; [g_navigation pushViewController:vc animated:YES]; }else if(tag==3){ JXCustomerChatListVc *vc=[JXCustomerChatListVc new]; [g_navigation pushViewController:vc animated:YES]; } }; dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ NSArray *friends = [[JXFriendObject sharedInstance] fetchAllFriendsFromLocal]; __block int a=0; [friends enumerateObjectsUsingBlock:^(JXFriendObject *_Nonnull friend, NSUInteger idx, BOOL * _Nonnull stop) { if ([friend.msgsNew intValue]==1) { a++; } }]; [self showNewMsgCount:a]; }); } - (void)setupCustomerLinkList { self.customerArr = g_App.customerLinkListArray; CGRect backFrame = self.backView.frame; backFrame.size.height = backFrame.size.height + 64* self.customerArr.count; self.backView.frame = backFrame; if (self.customerArr.count == 0) { return; } // int cY = _menuView.frame.origin.y + _menuView.frame.size.height; int cY = 50; for (int i = 0; i < _customerArr.count; i++) { UIView *customerView = [[UIView alloc] initWithFrame:CGRectMake(0, cY + 64 * i, self_width, 64)]; // customerView.backgroundColor = [UIColor redColor]; // UIView *lineView2 = [[UIView alloc] initWithFrame:CGRectMake(0, 0, JX_SCREEN_WIDTH, .5)]; // lineView2.backgroundColor = HEXCOLOR(0xdcdcdc); // [customerView addSubview:lineView2]; UIImageView *imageView2 = [[UIImageView alloc] initWithFrame:CGRectMake(15, 6, 52, 52)]; NSString *fileURL = self.customerArr[i][@"path"]; NSData * data = [NSData dataWithContentsOfURL:[NSURL URLWithString:fileURL]]; UIImage *image = [UIImage imageWithData:data]; if (image) { imageView2.image = image; }else { imageView2.image = [UIImage imageNamed:@"im_10000"]; } [customerView addSubview:imageView2]; UIButton *customerBtn = [[UIButton alloc] initWithFrame:CGRectMake(imageView2.frame.origin.x+imageView2.frame.size.width + 14, imageView2.frame.origin.y, self_width-imageView2.frame.size.width-15+20, 40)]; // [customerBtn setTitle:@"威尼斯客服" forState:UIControlStateNormal]; if (self.customerArr[i][@"name"]) { [customerBtn setTitle:self.customerArr[i][@"name"] forState:UIControlStateNormal]; }else { // imageView2.image = [UIImage imageNamed:@"im_10000"]; [customerBtn setTitle:@"--" forState:UIControlStateNormal]; } // [customerBtn ] customerBtn.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft; // customerBtn.titleEdgeInsets = UIEdgeInsetsMake(0, 10, 0, 0); // customerBtn.backgroundColor = UIColor.redColor; [customerBtn setTitleColor:[UIColor blackColor] forState:UIControlStateNormal]; [customerBtn addTarget:self action:@selector(customerClick:) forControlEvents:UIControlEventTouchUpInside]; customerBtn.tag = i+1; customerBtn.titleLabel.font = [UIFont systemFontOfSize:16]; [customerView addSubview:customerBtn]; UILabel *hintLabel = [[UILabel alloc] initWithFrame:CGRectMake(self_width - 40, customerBtn.frame.origin.y + customerBtn.frame.size.height - 15, 40, 15)]; if (self.customerArr[i][@"type"]) { hintLabel.text = self.customerArr[i][@"type"]; }else{ hintLabel.text = @"--"; } hintLabel.font = [UIFont systemFontOfSize:13]; hintLabel.backgroundColor = UIColor.clearColor; hintLabel.textColor = UIColor.blackColor; hintLabel.textAlignment = NSTextAlignmentCenter; [customerView addSubview:hintLabel]; UIView *lineView2 = [[UIView alloc] initWithFrame:CGRectMake(customerBtn.frame.origin.x, 63.5, customerBtn.frame.size.width, .5)]; lineView2.backgroundColor = HEXCOLOR(0xdcdcdc); [customerView addSubview:lineView2]; [self.backView addSubview:customerView]; [self.tableView reloadData]; } } - (void)editBtnAction:(UIButton *)btn { if (_seekTextField.text.length > 0) { return; } if (!self.isEdit) { self.isEdit = YES; self.moreBtn.hidden = YES; self.doneBtn.hidden = NO; [self.editBtn setTitle:Localized(@"JX_Clear") forState:UIControlStateNormal]; [self.tableView reloadData]; }else { [g_App showAlert:Localized(@"JX_EmptyListAllData") delegate:self tag:2457 onlyConfirm:NO]; } } - (void)doneBtnAction:(UIButton *)btn { self.isEdit = NO; self.moreBtn.hidden = NO; self.doneBtn.hidden = YES; [self.editBtn setTitle:Localized(@"JX_Edit") forState:UIControlStateNormal]; [self.tableView reloadData]; } - (void)actionTitle:(JXLabel *)sender { // 掉线后点击title重连 if([JXXMPP sharedInstance].isLogined != login_status_yes){ [g_xmpp showXmppOfflineAlert]; // UIAlertView *alert = [[UIAlertView alloc] initWithTitle:Localized(@"JX_Reconnect") message:nil delegate:self cancelButtonTitle:Localized(@"JX_Cencal") otherButtonTitles:Localized(@"JX_Confirm"), nil]; // [alert show]; } } // 更改备注名 - (void)friendRemarkNotif:(NSNotification *)notif { // [self getLastChatList]; _array = [[JXMessageObject sharedInstance] fetchRecentChat]; [_table reloadData]; // JXUserObject *user = notif.object; // for (int i = 0; i < _array.count; i ++) { // JXMsgAndUserObject *obj = _array[i]; // if ([obj.user.userId isEqualToString:user.userId]) { // obj.user.remarkName = user.remarkName; //// [_table reloadRow:i section:0]; // break; // } // } } // 消息撤回 - (void)withdrawNotifi:(NSNotification *) notif { JXMessageObject *msg = notif.object; for(NSInteger i=[_array count]-1;i>=0;i--){ JXMsgAndUserObject *p=[_array objectAtIndex:i]; if([p.user.userId isEqualToString:msg.fromUserId] && [p.message.messageId isEqualToString:msg.content]){//如果找到被撤回的那条消息 int n = [p.user.msgsNew intValue]; n--; if(n<0) n = 0; if(! [p.message queryIsRead] ){//如果未读 p.user.msgsNew = [NSNumber numberWithInt:n];//未读数量减1 [msg updateLastSend:UpdateLastSendType_Dec]; } break; } p =nil; } [self doRefresh:msg showNumber:YES]; } - (void)textFieldDidBeginEditing:(UITextField *)textField{ [textField resignFirstResponder]; JXSearchVC *vc = [[JXSearchVC alloc] initWithTable:@"msgsearchrecord"]; [g_navigation pushViewController:vc animated:YES]; } - (void) textFieldDidChange:(UITextField *)textField { [self doneBtnAction:self.doneBtn]; if (textField.text.length <= 0) { [self getServerData]; return; } [_searchArray removeAllObjects]; for (NSInteger i = 0; i < _array.count; i ++) { NSMutableArray *arr = [_array mutableCopy]; JXMsgAndUserObject *obj = arr[i]; NSArray * resultArray = [obj.message fetchSearchMessageWithUserId:obj.user.userId String:textField.text]; for (JXMessageObject *msg in resultArray) { if(msg.content.length > 0) { JXMsgAndUserObject *searchObj = [[JXMsgAndUserObject alloc] init]; searchObj.user = obj.user; searchObj.message = msg; [_searchArray addObject:searchObj]; } } } [self.tableView reloadData]; [self getTotalNewMsgCount]; } #pragma mark 右上角更多 -(void)onMore:(UIButton *)sender{ NSMutableArray *titles = [NSMutableArray arrayWithArray:@[Localized(@"JX_LaunchGroupChat"),Localized(@"JX_AddFriends"), Localized(@"JX_Scan"), Localized(@"JXNearVC_NearPer"),Localized(@"JX_Receiving"),Localized(@"JX_SearchPublicNumber")]]; NSMutableArray *images = [NSMutableArray arrayWithArray:@[@"message_creat_group_black", @"message_add_friend_black", @"messaeg_scnning_black", @"message_near_person_black",@"message_near_receiving",@"message_search_publicNumber"]]; NSMutableArray *sels = [NSMutableArray arrayWithArray:@[@"onNewRoom", @"onSearch", @"showScanViewController", @"onNear",@"onReceiving",@"searchPublicNumber"]]; NSArray *role = MY_USER_ROLE; if ([g_App.config.hideSearchByFriends intValue] == 1 && ([g_App.config.isCommonFindFriends intValue] == 0 || role.count > 0)) { }else { [titles removeObject:Localized(@"JX_AddFriends")]; [images removeObject:@"message_add_friend_black"]; [sels removeObject:@"onSearch"]; } if ([g_App.config.isCommonCreateGroup intValue] == 1 && role.count <= 0) { [titles removeObject:Localized(@"JX_LaunchGroupChat")]; [images removeObject:@"message_creat_group_black"]; [sels removeObject:@"onNewRoom"]; } if ([g_App.config.isOpenPositionService intValue] == 1) { [titles removeObject:Localized(@"JXNearVC_NearPer")]; [images removeObject:@"message_near_person_black"]; [sels removeObject:@"onNear"]; } if (![g_config.enablePayModule boolValue]) { [titles removeObject:Localized(@"JX_Receiving")]; [images removeObject:@"message_near_receiving"]; [sels removeObject:@"onReceiving"]; } if (![g_App.config.enableMpModule boolValue]) { [titles removeObject:Localized(@"JX_SearchPublicNumber")]; [images removeObject:@"message_search_publicNumber"]; [sels removeObject:@"searchPublicNumber"]; } JX_SelectMenuView *menuView = [[JX_SelectMenuView alloc] initWithTitle:titles image:images cellHeight:44]; menuView.sels = sels; menuView.delegate = self; [g_App.window addSubview:menuView]; } - (void)didMenuView:(JX_SelectMenuView *)MenuView WithIndex:(NSInteger)index { NSString *method = MenuView.sels[index]; SEL _selector = NSSelectorFromString(method); [self performSelectorOnMainThread:_selector withObject:nil waitUntilDone:YES]; } - (void) moreListActionWithIndex:(NSInteger)index { switch (index) { case 0: [self onNewRoom]; break; case 1: [self onSearch]; break; case 2: [self showScanViewController]; break; case 3: [self onNear]; break; default: break; } } // 搜索公众号 - (void)searchPublicNumber { JXSearchUserVC *searchUserVC = [JXSearchUserVC alloc]; searchUserVC.type = JXSearchTypePublicNumber; searchUserVC = [searchUserVC init]; [g_navigation pushViewController:searchUserVC animated:YES]; } // 创建群组 -(void)onNewRoom{ JXSelectFriendsVC *vc = [JXSelectFriendsVC alloc]; vc.isPlusButtonComming = YES; vc = [vc init]; // [g_navigation pushViewController:vc animated:YES]; // JXNewRoomVC* vc1 = [[JXNewRoomVC alloc]init]; [g_navigation pushViewController:vc animated:YES]; // [self onInsert]; } -(void)onInsert{ NSString* s = [NSUUID UUID].UUIDString; s = [[s stringByReplacingOccurrencesOfString:@"-" withString:@""] lowercaseString]; _room = [[roomData alloc] init]; _room.maxCount = 10000; _room.roomJid= s; _room.name = @"群聊"; _room.desc = @"他们很懒,什么都没写."; _room.userId = [g_myself.userId longLongValue]; _room.userNickName = g_myself.userNickname; _room.showRead = NO; _room.showMember = YES; _room.allowSendCard = YES; _room.isNeedVerify = NO; _room.allowInviteFriend = YES; _room.allowUploadFile = YES; _room.allowConference = YES; _room.allowSpeakCourse = YES; _room.isSecretGroup = NO; NSInteger category = 510; _chatRoom = [[JXXMPP sharedInstance].roomPool createRoom:s title:_room.name]; _chatRoom.delegate = self; [g_server addRoom:_room isPublic:YES isNeedVerify:_room.isNeedVerify category:category toView:self]; [_wait start:Localized(@"JXAlert_CreatRoomIng") delay:30]; } -(void)xmppRoomDidCreate{ NSInteger category = 510; if (_room.isSecretGroup) { NSString *g = [NSUUID UUID].UUIDString; g = [[g stringByReplacingOccurrencesOfString:@"-" withString:@""] lowercaseString]; _room.chatKeyGroup = g; } [g_server addRoom:_room isPublic:YES isNeedVerify:_room.isNeedVerify category:category toView:self]; _chatRoom.delegate = nil; } // 面对面建群 - (void)onFaceCreateRoom { JXFaceCreateRoomVC *vc = [[JXFaceCreateRoomVC alloc] init]; [g_navigation pushViewController:vc animated:YES]; } // 附近的人 -(void)onNear{ JXNearVC * nearVc = [[JXNearVC alloc] init]; [g_navigation pushViewController:nearVc animated:YES]; } // 收付款 - (void)onReceiving { JXPayViewController *payVC = [[JXPayViewController alloc] init]; [g_navigation pushViewController:payVC animated:YES]; } - (void) cancelBtnAction { if (_seekTextField.text.length > 0) { _seekTextField.text = nil; [self getServerData]; } [_seekTextField resignFirstResponder]; } - (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex { if (alertView.tag==22222) { return; } if (buttonIndex == 1) { if (alertView.tag == 2457) { for (NSInteger i = 0; i < _array.count; i ++) { JXMsgAndUserObject *p=[_array objectAtIndex:i]; if (![p.user.userId isEqualToString:FRIEND_CENTER_USERID]) { self.msgTotal -= [p.user.msgsNew intValue]; } p.user.topTime = nil; if (_topNum > 0) _topNum --; [p.user updateTopTime]; [p.user reset]; [p.message deleteAll]; p =nil; _refreshCount++; } [_array removeAllObjects]; [g_notify postNotificationName:kFriendListRefresh object:nil]; [self getTotalNewMsgCount]; [self getServerData]; }else { [[JXXMPP sharedInstance] login]; } } } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } - (void) delAllChatLogNotifi:(NSNotification *)notif { [self getServerData]; self.msgTotal = 0; _strCount=0; } -(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { return 68; } -(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { NSMutableArray *temArr=[NSMutableArray array];; [_array enumerateObjectsUsingBlock:^(JXMsgAndUserObject *_Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { JXMessageObject *userx=obj.message; if ([userx.fromUserId isEqualToString:@"10000"] || [userx.fromUserId isEqualToString:@"10100"] || [userx.fromUserId isEqualToString:@"10000006"]||[userx.fromUserId isEqualToString:@"10000009"]) { // [temArr insertObject:obj atIndex:0]; [_array removeObjectAtIndex:idx]; }else{ [temArr addObject:obj]; } }]; _array=temArr; return 1; } -(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { if (_seekTextField.text.length > 0) { return _searchArray.count; } return _array.count; } - (void)sendServiecGroupJid:(NSString *)jid{ [_array enumerateObjectsUsingBlock:^(JXMsgAndUserObject * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { }]; } #pragma mark ---------tableView协议---------------- - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { NSString* cellName = [NSString stringWithFormat:@"msg"]; JXCell *cell = [tableView dequeueReusableCellWithIdentifier:cellName]; cell.selected=YES; cell.tag=indexPath.row; UILongPressGestureRecognizer * longPressGesture =[[UILongPressGestureRecognizer alloc]initWithTarget:self action:@selector(cellLongPress:)]; longPressGesture.minimumPressDuration=0.5;//设置长按 时间 [cell addGestureRecognizer:longPressGesture]; NSMutableArray *array; if (_seekTextField.text.length > 0) { array = _searchArray; }else { array = _array; } JXMsgAndUserObject * dict = (JXMsgAndUserObject*) [array objectAtIndex:indexPath.row]; if(cell==nil){ cell = [[JXCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellName];; [_table addToPool:cell]; } //NSArray *fromArr=[dict.message.fromId componentsSeparatedByString:@"/"]; // if ([[fromArr lastObject] intValue]==1) if ([dict.user.roomFlag intValue]==1|| [dict.user.roomFlag intValue]==2) { cell.tempChatL.hidden=YES; }else{ if ([dict.user.status intValue]==2) { cell.tempChatL.hidden=YES; }else{ cell.tempChatL.hidden=NO; } } cell.chujiIMG.image=[UIImage imageNamed:dict.user.groupType]; cell.delegate = self; cell.didTouch = @selector(onHeadImage:); cell.didDragout=@selector(onDrag:); cell.didReplay = @selector(onReplay:); cell.didDelMsg = @selector(onDelMsg:); // [cell msgCellDataSet:dict indexPath:indexPath]; cell.title = dict.user.remarkName.length > 0 ? dict.user.remarkName : dict.user.userNickname; // if ([dict.message.fromUserId isEqualToString:@"10000"]) { cell.lbTitle.text=@"即信"; cell.title=@"即信"; } cell.user = dict.user; cell.userId = dict.user.userId; if (cell.user.groupType.length) { } // cell.bage = [NSString stringWithFormat:@"%d",[dict.user.msgsNew intValue]]; if ([dict.user.offlineNoPushMsg intValue] == 1) { cell.bage = [NSString stringWithFormat:@"%@",@"0"]; _strCount = [NSString stringWithFormat:@"%@",@"0"]; } else { cell.bage = [NSString stringWithFormat:@"%d",[dict.user.msgsNew intValue]]; } // NSLog(@"zzzzzzz%d",[dict.user.msgsNew intValue]); cell.isMsgVCCome = YES; cell.index = (int)indexPath.row; cell.bottomTitle = [TimeUtil getTimeStrStyle1:[dict.message.timeSend timeIntervalSince1970]]; cell.headImageView.tag = (int)indexPath.row; cell.headImageView.delegate = cell.delegate; cell.headImageView.didTouch = cell.didTouch; [cell.lbTitle setText:cell.title]; cell.lbTitle.tag = cell.index; cell.isNotPush = [dict.user.offlineNoPushMsg boolValue]; if ([dict.message.fromUserId isEqualToString:@"10000"]) { cell.headImageView.image=[UIImage imageNamed:@"ALOGO_1200"]; [cell.lbTitle setText:@"即信"]; cell.bottomTitle=@""; cell.lbSubTitle.text=@""; cell.headImage=@"ALOGO_1200"; } NSString *lastContet = [dict.message getLastContent]; BOOL flag = NO; if ([dict.user.isAtMe intValue] == 1 && _seekTextField.text.length <= 0 && (dict.user.roomFlag || dict.user.roomId.length > 0)) { lastContet = [NSString stringWithFormat:@"%@%@",Localized(@"JX_Someone@Me"),[dict.message getLastContent]]; flag = YES; } if(dict.user.lastInput.length > 0 && _seekTextField.text.length <= 0) { lastContet = [NSString stringWithFormat:@"%@%@",Localized(@"JX_Draft"),dict.user.lastInput]; flag = YES; // NSString *str = Localized(@"JX_Draft"); // NSMutableAttributedString *attr = [[NSMutableAttributedString alloc] initWithString:[NSString stringWithFormat:@"%@%@",str, dict.user.lastInput]]; // NSRange range = [[NSString stringWithFormat:@"%@%@",str, dict.user.lastInput] rangeOfString:str]; // [attr addAttribute:NSForegroundColorAttributeName value:[UIColor redColor] range:range]; // cell.lbSubTitle.attributedText = attr; } if ([dict.message.type intValue] == kWCMessageTypeSuperDelete || [dict.message.type intValue] == kWCMessageTypeGroupActivity) { lastContet = @""; } if ([dict.message.type intValue] == kWCMessageTypeText || flag) { [cell setSubtitle:lastContet]; }else { cell.lbSubTitle.text = lastContet; } NSLog(@"-------------%@", dict.message.type); [cell.timeLabel setText:cell.bottomTitle]; cell.bageNumber.delegate = cell.delegate; cell.bageNumber.didDragout = cell.didDragout; cell.bage = cell.bage; if ([dict.user.userId isEqualToString:FRIEND_CENTER_USERID]) { cell.bageNumber.lb.hidden = YES; CGRect frame = cell.bageNumber.frame; frame.size = CGSizeMake(10, 10); cell.bageNumber.frame = frame; }else { cell.bageNumber.lb.hidden = NO; CGRect frame = cell.bageNumber.frame; frame.size = CGSizeMake(20, 20); cell.bageNumber.frame = frame; } NSString * roomIdStr = dict.user.roomId; cell.roomId = roomIdStr; [cell headImageViewImageWithUserId:dict.user.userId roomId:roomIdStr]; cell.isEdit = self.isEdit; cell.isSmall = NO; // [self doAutoScroll:indexPath]; // cell.selectionStyle = UITableViewCellSelectionStyleNone; if (dict.user.topTime) { //cell.contentView.backgroundColor = HEXCOLOR(0xF0F1F2); }else { cell.contentView.backgroundColor = [UIColor whiteColor]; } return cell; // } } /**现实新朋友的角标*/ - (void) showNewMsgCount:(NSInteger)friendNewMsgNum { _strCount=[NSString stringWithFormat:@"%zd",friendNewMsgNum]; } - (void)scrollViewDidScroll:(UIScrollView *)scrollView { _reciveNewMessage2222=100; [self.view endEditing:YES]; } - (void)closeShow{ [[NSUserDefaults standardUserDefaults] removeObjectForKey:@"guangbo"]; } - (void)getFriend{ [g_server listAttention:10000 userId:MY_USER_ID toView:self]; // [g_server listFriend:0 userId:MY_USER_ID toView:self]; } #pragma mark 接受新消息广播 -(void)newMsgCome:(NSNotification *)notifacation { // 判断是否为加好友或者删除好友 JXFriendObject * friend = (JXFriendObject*) notifacation.object; //self.countTipL.hidden=NO; JXMessageObject *msg = notifacation.object; NSNumber *bodyType = msg.type; if (bodyType.intValue == kRoomRemind_DelMember || bodyType.intValue == kRoomRemind_AddMember) { //|| bodyType.intValue == 1 [self getFriend]; } if ([msg.fromUserId isEqualToString:@"10000"]) { NSString *strValue=[[NSUserDefaults standardUserDefaults] objectForKey:@"guangbo"]; if (strValue.length==0) { [self.showLogView removeFromSuperview]; [[NSUserDefaults standardUserDefaults] removeObjectForKey:@"guangbo"]; NSDictionary *dict=[msg.content mj_JSONObject]; NSLog(@"-22-22-2-%@", dict[@"createTime"]); chatListModel *person=[[chatListModel alloc]init]; person.id = dict[@"id"]; person.title = dict[@"title"]; person.type = dict[@"type"]; person.createTime = dict[@"createTime"]; person.content = dict[@"content"]; NSMutableArray *arrxx=[[NSMutableArray alloc]initWithArray:[SaveOrReadArr initNSKeyedUnarchiverHuiLv]]; //本地存储 [arrxx addObject:person]; [SaveOrReadArr initSerializationArrayHuiLv:arrxx]; [[NSUserDefaults standardUserDefaults] setObject:@"10000" forKey:@"guangbo"]; [[NSUserDefaults standardUserDefaults] synchronize]; JXMessShowView *showLogView=[[JXMessShowView alloc]init]; showLogView.strURL=dict[@"content"]; showLogView.contentDic=dict; showLogView.frame=[UIScreen mainScreen].bounds; [[UIApplication sharedApplication].keyWindow addSubview:showLogView]; self.showLogView=showLogView; } } if(msg==nil) return; BOOL showNumber=YES; NSString* s; s = [msg getTableName]; JXMsgAndUserObject* newobj = [[JXMsgAndUserObject alloc]init]; newobj.user = [[JXUserObject sharedInstance] getUserById:s]; // [self showNewMsgCount:[newobj.user.msgsNew integerValue]]; #ifdef Live_Version if([[JXLiveJidManager shareArray] contains:msg.toUserId] || [[JXLiveJidManager shareArray] contains:msg.fromUserId]) return; #endif NSString *userId = nil; if (msg.isGroup) { userId = msg.toUserId; }else { userId = msg.fromUserId; } JXUserObject *user = [[JXUserObject sharedInstance] getUserById:userId]; if([msg.toUserId isEqualToString:MY_USER_ID]){ if([msg.type intValue] == kWCMessageTypeAudioMeetingInvite || [msg.type intValue] == kWCMessageTypeVideoMeetingInvite) showNumber = NO;//一律不提醒 } if([msg.type intValue] == kWCMessageTypeSuperDelete){ return; } if([msg.type intValue] == kWCMessageTypeGroupActivity){ return; } if(!msg.isVisible && ![msg isAddFriendMsg]) return; if (!_audioPlayer) { _audioPlayer = [[JXAudioPlayer alloc]init]; } _audioPlayer.isOpenProximityMonitoring = NO; // NSString *userId = nil; // if (msg.isGroup) { // userId = msg.toUserId; // }else { // userId = msg.fromUserId; // } // // JXUserObject *user = [[JXUserObject sharedInstance] getUserById:userId]; if (msg.isGroup && msg.isDelay) { // NSLog(@"群聊消息 --- %@",[msg mj_keyValues]); // 更新任务endTime for (NSInteger i = 0; i < _taskArray.count; i ++) { NSDictionary *taskDic = _taskArray[i]; if ([user.userId isEqualToString:taskDic[@"userId"]]) { NSDate *startTime = taskDic[@"startTime"]; if ([msg.timeSend timeIntervalSince1970] <= [startTime timeIntervalSince1970]) { [_taskArray removeObjectAtIndex:i]; break; } if (![taskDic objectForKey:@"endTime"]) { [taskDic setValue:msg.timeSend forKey:@"endTime"]; [taskDic setValue:msg.messageId forKey:@"endMsgId"]; // [self createSynTask:taskDic]; [g_notify postNotificationName:kUpdateMsgSynTask object:user.userId]; } break; } } } if(msg.isRepeat){ return; } // 静音 if([g_default boolForKey:kMsgComeMute] == 1){ }else { if(![msg.fromUserId isEqualToString:MY_USER_ID] && !_audioPlayer.isPlaying && ![userId isEqualToString:current_chat_userId] && [user.offlineNoPushMsg intValue] != 1){ if ([user.veryCare intValue] == 1) { if ([user.veryCareTones intValue] == 0) { _audioPlayer.audioFile = [imageFilePath stringByAppendingPathComponent:@"默认.mp3"]; }else if ([user.veryCareTones intValue] == 1){ _audioPlayer.audioFile = [imageFilePath stringByAppendingPathComponent:@"常用的一个提示音.mp3"]; }else if ([user.veryCareTones intValue] == 2){ _audioPlayer.audioFile = [imageFilePath stringByAppendingPathComponent:@"电车报站提示音.mp3"]; }else if ([user.veryCareTones intValue] == 3){ _audioPlayer.audioFile = [imageFilePath stringByAppendingPathComponent:@"电脑YY提示音.mp3"]; }else if ([user.veryCareTones intValue] == 4){ _audioPlayer.audioFile = [imageFilePath stringByAppendingPathComponent:@"可爱消息音效.mp3"]; }else if ([user.veryCareTones intValue] == 5){ _audioPlayer.audioFile = [imageFilePath stringByAppendingPathComponent:@"女生短信提示音.mp3"]; }else if ([user.veryCareTones intValue] == 6){ _audioPlayer.audioFile = [imageFilePath stringByAppendingPathComponent:@"苹果line提示音铃声.mp3"]; }else if ([user.veryCareTones intValue] == 7){ _audioPlayer.audioFile = [imageFilePath stringByAppendingPathComponent:@"千牛上线提示.mp3"]; }else if ([user.veryCareTones intValue] == 8){ _audioPlayer.audioFile = [imageFilePath stringByAppendingPathComponent:@"日本短信提示音.mp3"]; }else if ([user.veryCareTones intValue] == 9){ _audioPlayer.audioFile = [imageFilePath stringByAppendingPathComponent:@"问题答错提示音.mp3"]; }else if ([user.veryCareTones intValue] == 10){ _audioPlayer.audioFile = [imageFilePath stringByAppendingPathComponent:@"系统提示完成回答正确.mp3"]; }else if ([user.veryCareTones intValue] == 11){ _audioPlayer.audioFile = [imageFilePath stringByAppendingPathComponent:@"小新嘿嘿提示音.mp3"]; }else if ([user.veryCareTones intValue] == 12){ _audioPlayer.audioFile = [imageFilePath stringByAppendingPathComponent:@"新浪微博刷新的声音.mp3"]; }else if ([user.veryCareTones intValue] == 13){ _audioPlayer.audioFile = [imageFilePath stringByAppendingPathComponent:@"选择正确提示音.mp3"]; }else if ([user.veryCareTones intValue] == 14){ _audioPlayer.audioFile = [imageFilePath stringByAppendingPathComponent:@"游戏常用的轻快系统提示.mp3"]; }else if ([user.veryCareTones intValue] == 15){ _audioPlayer.audioFile = [imageFilePath stringByAppendingPathComponent:@"游戏选择英雄.mp3"]; }else if ([user.veryCareTones intValue] == 16){ _audioPlayer.audioFile = [imageFilePath stringByAppendingPathComponent:@"游戏UI提示音.mp3"]; }else if ([user.veryCareTones intValue] == 17){ _audioPlayer.audioFile = [imageFilePath stringByAppendingPathComponent:@"Facebook提示音.mp3"]; } }else{ _audioPlayer.audioFile = [imageFilePath stringByAppendingPathComponent:@"默认.mp3"]; } _audioPlayer.isNotStopLast = YES; [_audioPlayer open]; [_audioPlayer play]; } } // 添加戳一戳动画 if([msg.type intValue] == kWCMessageTypeShake){ int value = 0; if (msg.isMySend) { value = -50; }else { value = 50; } if (msg.content.length>0) { //弹视频 [SimpleAudioPlayer playFile:@"抖一抖铃声.mp3"]; CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"transform.translation.x"];///横向移动 animation.toValue = [NSNumber numberWithInt:value]; animation.duration = 0.5; animation.removedOnCompletion = YES;//yes的话,又返回原位置了。 animation.repeatCount = 2; animation.fillMode = kCAFillModeForwards; AudioServicesPlaySystemSound(1521); // JXShadeShowView *show=[[JXShadeShowView alloc]init]; // show.backgroundColor=[UIColor colorWithWhite:0.0 alpha:0.8]; // show.frame=[UIScreen mainScreen].bounds; // show.messageObject=msg; // [[UIApplication sharedApplication].keyWindow addSubview:show]; // show.cancelSoundBlock = ^(JXMessageObject *messageObject) { }; }else{ CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"transform.translation.x"];///横向移动 animation.toValue = [NSNumber numberWithInt:value]; animation.duration = 0.5; animation.removedOnCompletion = YES;//yes的话,又返回原位置了。 animation.repeatCount = 2; animation.fillMode = kCAFillModeForwards; AudioServicesPlaySystemSound(1521); [g_window.layer addAnimation:animation forKey:nil]; } } if ([g_myself.isVibration intValue] > 0) { if ([user.offlineNoPushMsg intValue] == 1) { } else { AudioServicesPlaySystemSound(kSystemSoundID_Vibrate); } } if (![msg.fromUserId isEqualToString:MY_USER_ID] && ![userId isEqualToString:current_chat_userId]) { if (msg.isGroup && msg.isAtMe) { JXUserObject *user = [[JXUserObject alloc] init]; user.userId = [msg getTableName]; user.isAtMe = [NSNumber numberWithInt:1]; [user updateIsAtMe]; } } //NSLog(@"群聊-单聊 消息 --- %@",[msg mj_keyValues]); [self doRefresh:msg showNumber:showNumber]; msg = nil; } - (void)createSynTask:(NSDictionary *)dict{ JXSynTask *task = [[JXSynTask alloc] init]; task.userId = dict[@"userId"]; task.roomId = dict[@"roomId"]; task.startTime = dict[@"startTime"]; task.endTime = dict[@"endTime"]; task.lastTime = dict[@"lastTime"]; task.startMsgId = dict[@"startMsgId"]; task.endMsgId = dict[@"endMsgId"]; [task insert]; } //添加朋友发送的消息 -(void)newMsgSend:(NSNotification *)notifacation { JXMessageObject *msg = notifacation.object; if(!msg.isVisible && ![msg isAddFriendMsg]) return; if ([msg.type intValue] == kWCMessageTypeWithdraw) { msg.content = Localized(@"JX_AlreadyWithdraw"); } if ([msg.type intValue] == kWCMessageTypeSuperDelete) { // msg.content = Localized(@"JX_AlreadyWithdraw"); return; } [self doRefresh:msg showNumber:NO]; msg = nil; } -(void)newRequest:(NSNotification *)notifacation { //[g_server listAttention:0 userId:MY_USER_ID toView:self]; JXFriendObject * friend = (JXFriendObject*) notifacation.object; if (friend.status.intValue==2) { [self getFriend]; } } #pragma --------------------新来的消息Badge计算--------------- -(void)doRefresh:(JXMessageObject*)msg showNumber:(BOOL)showNumber{ NSString* s; s = [msg getTableName]; if([s isEqualToString:FRIEND_CENTER_USERID])//假如是朋友验证消息,过滤 return; JXMsgAndUserObject *oldobj=nil; for(int i=0;i<[_array count];i++){ oldobj=[_array objectAtIndex:i]; if([oldobj.user.userId isEqualToString:s]){ oldobj.message.content = [msg getLastContent]; oldobj.message.type = msg.type; oldobj.message.timeSend = msg.timeSend; oldobj.message.fromId=msg.fromId; if([current_chat_userId isEqualToString:s] || msg.isMySend || !showNumber){//假如是我发送的,或正在这个界面,或不显示数量时 if([current_chat_userId isEqualToString:s])//正在聊天时,置0;是我发送的消息时,不变化数量 oldobj.user.msgsNew = [NSNumber numberWithInt:0]; } else{ if ([msg.content rangeOfString:Localized(@"JX_OtherWithdraw")].location == NSNotFound) { oldobj.user.msgsNew = [NSNumber numberWithInt:[oldobj.user.msgsNew intValue]+1]; } } [_array removeObjectAtIndex:i]; break; } oldobj = nil; } NSString *userId = nil; if (msg.isGroup) { userId = msg.toUserId; }else { userId = msg.fromUserId; } //[SaveOrReadArr inserinto:msg.messageId msgModel:oldobj]; if(oldobj){//列表中有此用户: if (![msg.fromUserId isEqualToString:MY_USER_ID] && ![userId isEqualToString:current_chat_userId]) { if (msg.isGroup && msg.isAtMe) { oldobj.user.isAtMe = [NSNumber numberWithInt:1]; [oldobj.user updateIsAtMe]; } } if ([oldobj.user.topTime timeIntervalSince1970] > 0) { oldobj.user.topTime = [NSDate date]; [oldobj.user updateTopTime]; [_array insertObject:oldobj atIndex:0]; }else if(oldobj.user){ [_array insertObject:oldobj atIndex:_topNum]; } _refreshCount++; [_table reloadData]; }else{ //列表中没有此用户: JXMsgAndUserObject* newobj = [[JXMsgAndUserObject alloc]init]; newobj.user = [[JXUserObject sharedInstance] getUserById:s]; newobj.message = [msg copy]; if([current_chat_userId isEqualToString:s] || msg.isMySend || !showNumber){//假如是我发送的,或正在这个界面,或不显示数量时 if([current_chat_userId isEqualToString:s])//正在聊天时,置0;是我发送的消息时,不变化数量 newobj.user.msgsNew = [NSNumber numberWithInt:0]; } else if([s isEqualToString:FRIEND_CENTER_USERID])//假如是朋友验证消息,总为1 return; // newobj.user.msgsNew = [NSNumber numberWithInt:1]; else{ newobj.user.msgsNew = [NSNumber numberWithInt:[newobj.user.msgsNew intValue]]; if (msg.isGroup && msg.isAtMe) { newobj.user.isAtMe = [NSNumber numberWithInt:1]; [newobj.user updateIsAtMe]; } } if (newobj.user) { NSLog(@"消息ID。%@",msg.messageId); if (_topNum>_array.count) { return; } [_array insertObject:newobj atIndex:_topNum]; // NSMutableArray *indexPaths = [[NSMutableArray alloc] init]; // NSIndexPath *indexPath = [NSIndexPath indexPathForRow:_topNum inSection:0]; // [indexPaths addObject:indexPath]; [UIView performWithoutAnimation:^{ NSIndexSet *reloadSet = [NSIndexSet indexSetWithIndex:0]; [_table reloadSections:reloadSet withRowAnimation:UITableViewRowAnimationNone]; }]; if (newobj==nil) { // [_table gotoFirstRow:YES]; //[_table gotoLastRow:YES]; return; } @try { //[_table gotoFirstRow:YES]; // [_table beginUpdates]; //[_table insertRowsAtIndexPaths:indexPaths withRowAnimation:UITableViewRowAnimationNone]; // [_table endUpdates]; //修改了 } @catch (NSException *exception) { } @finally { } // [_table gotoLastRow:YES]; } newobj = nil; } if(msg.isMySend || !showNumber || [oldobj.user.offlineNoPushMsg intValue] == 1){ return; }else{ [self getTotalNewMsgCount]; } // _reciveNewMessage2222=100; // JXMessageObject *msgUse=oldobj.message; // long time = (long)[[NSDate date] timeIntervalSince1970]; // time = (time *1000 + g_server.timeDifference); // NSString *salt = [NSString stringWithFormat:@"%ld", time]; //// [g_server Useract_getGroupOneType:salt jid:msgUse.fromUserId andToView:self]; } //加载数据 -(void)getServerData { [self stopLoading]; if(_array==nil || _page == 0){ [_array removeAllObjects]; _array = [[NSMutableArray alloc]init]; _refreshCount++; } //访问DB获取好友消息列表 NSMutableArray* p = [[JXMessageObject sharedInstance] fetchRecentChat]; // 查出置顶个数 // for (NSInteger i = 0; i < p.count; i ++) { // JXMsgAndUserObject * obj = (JXMsgAndUserObject*) [p objectAtIndex:i]; // // if (obj.user.topTime) { // _topNum ++; // } // } // if (p.count>0 || _page == 0) { if (p.count>0) { [_array addObjectsFromArray:p]; //让数组按时间排序 [self sortArrayWithTime]; [_table hideEmptyImage]; [_table reloadData]; self.isShowFooterPull = NO; } if (_array.count <=0) { [_table showEmptyImage:EmptyTypeNoData]; [_table reloadData]; } [self getTotalNewMsgCount]; [p removeAllObjects]; } //数据(CELL)按时间顺序重新排列 - (void)sortArrayWithTime{ for (int i = 0; i<[_array count]; i++) { for (int j=i+1; j<[_array count]; j++) { JXMsgAndUserObject * dicta = (JXMsgAndUserObject*) [_array objectAtIndex:i]; NSDate * a = dicta.message.timeSend ; // NSLog(@"a = %d",[dicta.user.msgsNew intValue]); JXMsgAndUserObject * dictb = (JXMsgAndUserObject*) [_array objectAtIndex:j]; NSDate * b = dictb.message.timeSend ; // NSLog(@"b = %d",b); if ([[a laterDate:b] isEqualToDate:b]) { // - (NSDate *)earlierDate:(NSDate *)anotherDate; // 与anotherDate比较,返回较早的那个日期 // // - (NSDate *)laterDate:(NSDate *)anotherDate; // 与anotherDate比较,返回较晚的那个日期 // JXMsgAndUserObject * dictc = dicta; [_array replaceObjectAtIndex:i withObject:dictb]; [_array replaceObjectAtIndex:j withObject:dicta]; } } } } //-(void)afterDalay{ // _dalayAction = NO; //} - (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; self.tableView.scrollEnabled=YES; [self.navigationController setNavigationBarHidden:YES animated:NO]; [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleDefault]; [self.navigationController viewWillAppear:animated]; [g_notify postNotificationName:@"tabbarFrame" object:nil userInfo:@{@"title":@"1"}]; // NSMutableArray* p = [[JXMessageObject sharedInstance] fetchRecentChat]; // _array=p; // [_table reloadData]; } #pragma mark --- -(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { [tableView deselectRowAtIndexPath:indexPath animated:YES]; NSLog(@"didselectRowAtIndexPath %@",[[[[self superclass] superclass] superclass] class]); [g_notify postNotificationName:@"hiddenTip" object:nil]; //[self doneBtnAction:self.doneBtn]; JXCell* cell = (JXCell*)[tableView cellForRowAtIndexPath:indexPath]; //清除badge cell.bage = @"0"; self.countTipL.hidden=YES; NSMutableArray *array; if (_seekTextField.text.length > 0) { array = _searchArray; }else { array = _array; } JXMsgAndUserObject *p=[array objectAtIndex:indexPath.row]; if (![p.user.userId isEqualToString:FRIEND_CENTER_USERID]) { self.msgTotal -= [cell.bage intValue]; } if ([p.user.groupStatus intValue]==2||[p.user.groupStatus intValue]==1) { UIAlertView *alert=[[UIAlertView alloc]initWithTitle:nil message:@"尊敬的用户:您因长时间未上线被判断为不活跃玩家,系统暂时将您移出群聊。请您联系您的上级代理再次进群,给您带来的不便请您谅解!谢谢!" delegate:self cancelButtonTitle:@"知道了" otherButtonTitles:nil, nil]; alert.tag=2222; [alert show]; return; } [UIApplication sharedApplication].applicationIconBadgeNumber = [UIApplication sharedApplication].applicationIconBadgeNumber - [p.user.msgsNew intValue]; // [g_server userChangeMsgNum:[UIApplication sharedApplication].applicationIconBadgeNumber toView:self]; int lineNum = 0; if (_seekTextField.text.length > 0) { lineNum = [p.message getLineNumWithUserId:p.user.userId]; } if([p.user.userId isEqualToString:FRIEND_CENTER_USERID]){ JXNewFriendViewController* vc = [[JXNewFriendViewController alloc]init]; // [g_App.window addSubview:vc.view]; //[g_navigation pushViewController:vc animated:YES]; [self.navigationController pushViewController:vc animated:YES]; return; } if ([p.user.userId intValue] == [SHIKU_TRANSFER intValue]) { JXTransferNoticeVC *noticeVC = [[JXTransferNoticeVC alloc] init]; //[g_navigation pushViewController:noticeVC animated:YES]; [self.navigationController pushViewController:noticeVC animated:YES]; p.user.msgsNew = [NSNumber numberWithInt:0]; [p.message updateNewMsgsTo0]; [self getTotalNewMsgCount]; return; } if([p.user.userType intValue] == 2 && [p.user.status intValue] != 2){ JXUserInfoVC* userVC = [JXUserInfoVC alloc]; userVC.user = p.user; userVC.userId = p.user.userId; userVC.fromAddType = 6; userVC = [userVC init]; [g_navigation pushViewController:userVC animated:YES]; // [self.navigationController pushViewController:userVC animated:YES]; return; } JXChatViewController *sendView=[JXChatViewController alloc]; sendView.scrollLine = lineNum; sendView.title = p.user.remarkName.length > 0 ? p.user.remarkName : p.user.userNickname; if([p.user.roomFlag intValue] > 0 || p.user.roomId.length > 0){ // if(g_xmpp.isLogined != 1){ // // 掉线后点击title重连 // [g_xmpp showXmppOfflineAlert]; // return; // } sendView.fromUserID = p.message.fromUserId; sendView.roomJid = p.user.userId; sendView.roomId = p.user.roomId; sendView.groupStatus = p.user.groupStatus; if ([p.user.groupStatus intValue] == 0) { sendView.chatRoom = [[JXXMPP sharedInstance].roomPool joinRoom:p.user.userId title:p.user.userNickname lastDate:nil isNew:NO]; } if (p.user.roomFlag || p.user.roomId.length > 0) { NSDictionary * groupDict = [p.user toDictionary]; roomData * roomdata = [[roomData alloc] init]; [roomdata getDataFromDict:groupDict]; sendView.room = roomdata; sendView.newMsgCount = [p.user.msgsNew intValue]; p.user.isAtMe = [NSNumber numberWithInt:0]; [p.user updateIsAtMe]; } } NSArray *fromArr=[p.message.fromId componentsSeparatedByString:@"/"]; if ([[fromArr lastObject] intValue]==1||[p.user.status intValue]!=2) { sendView.useInfoTempChat=11; }else{ if (fromArr==nil) { sendView.useInfoTempChat=11; }else{ sendView.useInfoTempChat=1; } } sendView.rowIndex = indexPath.row; sendView.lastMsg = p.message; sendView.chatPerson = p.user; sendView = [sendView init]; // [g_navigation pushViewController:sendView animated:YES]; [self.navigationController pushViewController:sendView animated:YES]; sendView.view.hidden = NO; p.user.msgsNew = [NSNumber numberWithInt:0]; [p.message updateNewMsgsTo0]; //_homeVc.strURL=@""; [self cancelBtnAction]; [self getTotalNewMsgCount]; } - (void)cellLongPress:(UILongPressGestureRecognizer *)longRecognizer{ JXCell *cell=(JXCell *)longRecognizer.view; NSLog(@"====%ld",(long)cell.tag); JXMsgAndUserObject *p=[_array objectAtIndex:cell.tag]; UIAlertController * alertController = [UIAlertController alertControllerWithTitle:nil message:nil preferredStyle:UIAlertControllerStyleActionSheet]; NSString *str; if (p.user.topTime) { str = Localized(@"JX_CancelTop"); }else { str = Localized(@"JX_Top"); } UIAlertAction *sexMan = [UIAlertAction actionWithTitle:str style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) { self.tempMsgAndUserObject = p; int topChat; if (p.user.topTime) { topChat = 0; }else { topChat = 1; } if (p.user.roomId.length > 0) { [g_server roomMemberSetOfflineNoPushMsg:p.user.roomId userId:MY_USER_ID type:1 offlineNoPushMsg:topChat toView:self]; }else { [g_server friendsUpdateOfflineNoPushMsgUserId:g_myself.userId toUserId:p.user.userId offlineNoPushMsg:topChat type:2 toView:self]; } NSLog(@"选择性别 - 男"); }]; UIAlertAction *sexWoman = [UIAlertAction actionWithTitle:@"标为未读" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) { JXMsgAndUserObject *p=[_array objectAtIndex:cell.tag]; if ([p.user.msgsNew intValue] > 0) { //清除badge cell.bage = @"0"; p.user.msgsNew = @0; if (![p.user.userId isEqualToString:FRIEND_CENTER_USERID]) { self.msgTotal -= [cell.bage intValue]; } p.user.msgsNew = [NSNumber numberWithInt:0]; [p.message updateNewMsgsTo0]; }else { cell.bage = @"1"; p.user.msgsNew = @1; [p.user updateNewMsgNum]; } [UIApplication sharedApplication].applicationIconBadgeNumber = [UIApplication sharedApplication].applicationIconBadgeNumber - [p.user.msgsNew intValue]; // [g_server userChangeMsgNum:[UIApplication sharedApplication].applicationIconBadgeNumber toView:self]; [self getTotalNewMsgCount]; }]; UIAlertAction *deleAction = [UIAlertAction actionWithTitle:@"删除" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) { JXMsgAndUserObject *p=[_array objectAtIndex:cell.tag]; if (![p.user.userId isEqualToString:FRIEND_CENTER_USERID]) { self.msgTotal -= [p.user.msgsNew intValue]; } p.user.topTime = nil; if (_topNum > 0) _topNum --; // [p.user updateTopTime]; [p.user reset]; [g_notify postNotificationName:kFriendListRefresh object:nil]; [p.message deleteAll]; p =nil; [_array removeObjectAtIndex:cell.tag]; _refreshCount++; [_table reloadData]; [self getTotalNewMsgCount]; }]; UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) { }]; [alertController addAction:sexMan]; [alertController addAction:sexWoman]; [alertController addAction:deleAction]; [alertController addAction:cancelAction]; [self presentViewController:alertController animated:YES completion:nil]; } -(void)onLoginChanged:(NSNotification *)notifacation{ if (!_activity) { _activity = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray]; [self.tableHeader addSubview:_activity]; } switch ([JXXMPP sharedInstance].isLogined){ case login_status_ing:{ // self.title = Localized(@"JXMsgViewController_GoingOff"); CGSize size = [self.title boundingRectWithSize:CGSizeMake(MAXFLOAT, MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName : [UIFont systemFontOfSize:18.0]} context:nil].size; _activity.frame = CGRectMake(JX_SCREEN_WIDTH / 2 + size.width / 2 + 10, JX_SCREEN_TOP - 32, 20, 20); [_activity startAnimating]; } break; case login_status_no:{ // self.title = Localized(@"JXMsgViewController_OffLine"); if (g_xmpp.isPasswordError) { self.title = [NSString stringWithFormat:@"%@(%@)",Localized(@"JXMainViewController_Message"),Localized(@"JX_PasswordError")]; } [_activity stopAnimating]; } break; case login_status_yes:{ // self.title = Localized(@"JXMsgViewController_OnLine"); // 同步最近一条聊天记录 [self getLastChatList]; //[_activity stopAnimating]; } break; } } - (void)getLastChatList { BOOL isFirstSync = [g_default boolForKey:kISFirstGetLastChatList]; long long syncTimeLen; if (!isFirstSync) { // if ([g_myself.chatSyncTimeLen longLongValue] > [g_myself.groupChatSyncTimeLen longLongValue]) { syncTimeLen = [g_myself.chatSyncTimeLen longLongValue]; // }else { // syncTimeLen = [g_myself.groupChatSyncTimeLen longLongValue]; // } syncTimeLen = syncTimeLen * 24 * 3600 * 1000; // syncTimeLen = [[NSDate date] timeIntervalSince1970] * 1000.0 - m; // 同步 永久 syncTime == 0 if ([g_myself.chatSyncTimeLen longLongValue] == 0 || [g_myself.chatSyncTimeLen longLongValue] == -1) { syncTimeLen = 0; } // [g_default setBool:YES forKey:kISFirstGetLastChatList]; }else { syncTimeLen = g_server.lastOfflineTime * 1000.0; // syncTimeLen =604800000; NSLog(@"最后一次离线时间:%f",g_server.lastOfflineTime); } // 不同步 batchJoinMucChat(); if ([g_myself.chatSyncTimeLen longLongValue] == -2) { [g_xmpp.roomPool createAll]; }else { [g_server getLastChatListStartTime:[NSNumber numberWithLong:syncTimeLen] toView:self]; } } //- (void)getLastChatList { // // BOOL isFirstSync = [g_default boolForKey:kISFirstGetLastChatList]; // // long long syncTimeLen; // // dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ // // // [self.header endRefreshing]; // }); // // if (!isFirstSync) { //// if ([g_myself.chatSyncTimeLen longLongValue] > [g_myself.groupChatSyncTimeLen longLongValue]) { // syncTimeLen = [g_myself.chatSyncTimeLen longLongValue]; //// }else { //// syncTimeLen = [g_myself.groupChatSyncTimeLen longLongValue]; //// } // // double m = syncTimeLen * 24 * 3600 * 1000; // syncTimeLen = [[NSDate date] timeIntervalSince1970] * 1000.0 - m; // // if ([g_myself.chatSyncTimeLen longLongValue] == 0 || [g_myself.chatSyncTimeLen longLongValue] == -1) { // syncTimeLen = 0; // } // // // }else { // syncTimeLen = g_server.lastOfflineTime * 1000.0; // } // // NSMutableArray* p = [[JXMessageObject sharedInstance] fetchRecentChat]; // _array=p; // [_table reloadData]; // //// if ([g_myself.chatSyncTimeLen longLongValue] == -2) { //// //// [g_xmpp.roomPool createAll]; // //// }else {//修改了 去掉最后一条消息 //// [g_server getLastChatListStartTime:@1592203493000 toView:self]; // [g_server getLastChatListStartTime:[NSNumber numberWithLong:syncTimeLen] toView:self]; // [self getAllChatList]; //// } // //} //对选中的Cell根据editingStyle进行操作 - (void) tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath { if (indexPath.section==0) { return; } if (_seekTextField.text.length > 0) { return; } JXMsgAndUserObject *p=[_array objectAtIndex:indexPath.row]; if (![p.user.userId isEqualToString:FRIEND_CENTER_USERID]) { self.msgTotal -= [p.user.msgsNew intValue]; } [p.user reset]; [p.message deleteAll]; p =nil; [_array removeObjectAtIndex:indexPath.row]; _refreshCount++; [_table reloadData]; [self getTotalNewMsgCount]; } - (NSArray *)tableView:(UITableView *)tableView editActionsForRowAtIndexPath:(NSIndexPath *)indexPath { if (indexPath.section==0) { return @[]; } JXMsgAndUserObject *p=[_array objectAtIndex:indexPath.row]; UITableViewRowAction *readBtn = [UITableViewRowAction rowActionWithStyle:UITableViewRowActionStyleNormal title:[p.user.msgsNew intValue] > 0 ? Localized(@"JX_MsgMarkedRead") : Localized(@"JX_MsgMarkedUnread") handler:^(UITableViewRowAction * _Nonnull action, NSIndexPath * _Nonnull indexPath) { JXCell* cell = (JXCell*)[tableView cellForRowAtIndexPath:indexPath]; if ([p.user.msgsNew intValue] > 0) { //清除badge cell.bage = @"0"; p.user.msgsNew = @0; if (![p.user.userId isEqualToString:FRIEND_CENTER_USERID]) { self.msgTotal -= [cell.bage intValue]; } p.user.msgsNew = [NSNumber numberWithInt:0]; [p.message updateNewMsgsTo0]; }else { cell.bage = @"1"; p.user.msgsNew = @1; [p.user updateNewMsgNum]; } [UIApplication sharedApplication].applicationIconBadgeNumber = [UIApplication sharedApplication].applicationIconBadgeNumber - [p.user.msgsNew intValue]; // [g_server userChangeMsgNum:[UIApplication sharedApplication].applicationIconBadgeNumber toView:self]; [self getTotalNewMsgCount]; }]; readBtn.backgroundColor = [UIColor orangeColor]; UITableViewRowAction *delBtn = [UITableViewRowAction rowActionWithStyle:UITableViewRowActionStyleDestructive title:Localized(@"JX_Delete") handler:^(UITableViewRowAction * _Nonnull action, NSIndexPath * _Nonnull indexPath) { if (_seekTextField.text.length > 0) { return; } JXMsgAndUserObject *p=[_array objectAtIndex:indexPath.row]; if (![p.user.userId isEqualToString:FRIEND_CENTER_USERID]) { self.msgTotal -= [p.user.msgsNew intValue]; } p.user.topTime = nil; if (_topNum > 0) _topNum --; // [p.user updateTopTime]; [p.user reset]; [g_notify postNotificationName:kFriendListRefresh object:nil]; [p.message deleteAll]; p =nil; [_array removeObjectAtIndex:indexPath.row]; _refreshCount++; [_table reloadData]; [self getTotalNewMsgCount]; }]; NSString *str; if (p.user.topTime) { str = Localized(@"JX_CancelTop"); }else { str = Localized(@"JX_Top"); } UITableViewRowAction *topBtn = [UITableViewRowAction rowActionWithStyle:UITableViewRowActionStyleNormal title:str handler:^(UITableViewRowAction * _Nonnull action, NSIndexPath * _Nonnull indexPath) { self.tempMsgAndUserObject = p; int topChat; if (p.user.topTime) { topChat = 0; }else { topChat = 1; } if (p.user.roomId.length > 0) { [g_server roomMemberSetOfflineNoPushMsg:p.user.roomId userId:MY_USER_ID type:1 offlineNoPushMsg:topChat toView:self]; }else { [g_server friendsUpdateOfflineNoPushMsgUserId:g_myself.userId toUserId:p.user.userId offlineNoPushMsg:topChat type:2 toView:self]; } }]; return @[delBtn, readBtn, topBtn]; } - (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath { if (indexPath.section==0) { return NO; } if (_seekTextField.text.length > 0) { return NO; } //将“新的消息”及“系统消息”设为不可编辑 JXMsgAndUserObject *p=[_array objectAtIndex:indexPath.row]; long n = [p.user.userId intValue]; if(n == [FRIEND_CENTER_USERID intValue]) return NO; if(n == BLOG_CENTER_INT) return NO; // if(n == CALL_CENTER_INT) // return NO; return YES; } -(void)delFriend:(NSNotification *)notifacation { // NSLog(@"delFriend.notify"); JXUserObject* user = (JXUserObject *)notifacation.object; NSString* userId = user.userId; if(userId==nil) return; for(NSInteger i=[_array count]-1;i>=0;i--){ JXMsgAndUserObject *p=[_array objectAtIndex:i]; if([p.user.userId isEqualToString:userId]){ [_array removeObjectAtIndex:i]; break; } p =nil; } _refreshCount++; [_table reloadData]; [self getTotalNewMsgCount]; JXMessageObject *msg = [[JXMessageObject alloc] init]; msg.objectId = SYNC_LABEL; [g_notify postNotificationName:kXMPPMessageUpadtePasswordNotification object:msg]; } - (void)onDelMsg:(JXCell *)cell { if (_seekTextField.text.length > 0) { return; } JXMsgAndUserObject *p=[_array objectAtIndex:cell.index]; if (![p.user.userId isEqualToString:FRIEND_CENTER_USERID]) { self.msgTotal -= [p.user.msgsNew intValue]; } p.user.topTime = nil; if (_topNum > 0) _topNum --; [p.user updateTopTime]; [p.user reset]; [g_notify postNotificationName:kFriendListRefresh object:nil]; [p.message deleteAll]; p =nil; [_array removeObjectAtIndex:cell.index]; _refreshCount++; [self getTotalNewMsgCount]; [self getServerData]; } - (void)onReplay:(JXCell *)cell { self.replayNum = cell.index; NSMutableArray *array; if (_seekTextField.text.length > 0) { array = _searchArray; }else { array = _array; } JXMsgAndUserObject * dict = (JXMsgAndUserObject*) [array objectAtIndex:self.replayNum]; if ([dict.user.userId isEqualToString:SHIKU_TRANSFER]) { return; } if (dict.user.roomId.length > 0) { self.replayRoomId = dict.user.roomId; [g_server roomGetRoom:self.replayRoomId toView:self]; }else { [self showReplayView]; } } - (void)showReplayView { NSMutableArray *array; if (_seekTextField.text.length > 0) { array = _searchArray; }else { array = _array; } JXMsgAndUserObject * dict = (JXMsgAndUserObject*) [array objectAtIndex:self.replayNum]; JXUserObject *user = [[JXUserObject alloc] init]; user = dict.user; if ([user.groupStatus intValue] == 1) { [g_App showAlert:Localized(@"JX_OutOfTheGroup1")]; return; } // if (self.replayTextView.text.length > 0) { // self.replayTextView.text = nil; // } // self.bigView.hidden = NO; // [self.replayTextView becomeFirstResponder]; // self.replayTitle.text = [NSString stringWithFormat:@"%@ : %@",Localized(@"JX_MsgTheQuickReply"),user.userNickname]; self.lastMsgInput = [dict.message getLastContent]; // 记录最后一条消息 self.inputRectView = [[JXInputRectView alloc] initWithFrame:self.view.bounds sureBtnTitle:Localized(@"JX_Send")]; self.inputRectView.title =[NSString stringWithFormat:@"%@ : %@",Localized(@"JX_MsgTheQuickReply"),user.userNickname]; self.inputRectView.delegate = self; self.inputRectView.onRelease = @selector(onRelease); [g_window addSubview:self.inputRectView]; self.inputRectView.placeString = self.lastMsgInput; // self.replayTextView.textColor = [UIColor lightGrayColor]; // self.replayTextView.text = self.lastMsgInput; // self.replayTextView.selectedRange = NSMakeRange(0, 0); // // 加载水印时调用textViewDidChange 高度自适应 // [self textViewDidChange:self.replayTextView]; // // 防止出现特殊符号自动换行问题 // NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init]; // paragraphStyle.lineBreakMode = NSLineBreakByCharWrapping; // NSDictionary *attributes = @{NSFontAttributeName:SYSFONT(16), // NSParagraphStyleAttributeName:paragraphStyle, // NSForegroundColorAttributeName:[UIColor lightGrayColor] // }; // self.replayTextView.attributedText = [[NSAttributedString alloc] initWithString:self.lastMsgInput attributes:attributes]; JXUserObject *user1 = [[JXUserObject sharedInstance] getUserById:dict.user.userId]; // 提前拿到数据防止cell.indexPath.row改变后导致发送消息错误 self.repalyMsg = [[JXMessageObject alloc] init]; self.repalyMsg.fromUserId = MY_USER_ID; self.repalyMsg.fromUserName = MY_USER_NAME; self.repalyMsg.toUserId = dict.user.userId; self.repalyMsg.isGroup = dict.user.roomId.length > 0 ? YES : NO; self.repalyMsg.type = [NSNumber numberWithInt:kWCMessageTypeText]; self.repalyMsg.timeSend = [NSDate date]; self.repalyMsg.isSend = [NSNumber numberWithInt:transfer_status_ing]; self.repalyMsg.isRead = [NSNumber numberWithBool:NO]; self.repalyMsg.isReadDel = user1.isOpenReadDel; self.repalyMsg.sendCount = 3; } - (void)sendIt { if (self.inputRectView.text.length <= 0) { // 当是水印状态下,不发送消息 return; } [self.inputRectView hide]; NSString *roomName = self.repalyMsg.isGroup ? self.repalyMsg.toUserId : nil; self.repalyMsg.content = self.inputRectView.text; [self.repalyMsg insert:nil]; self.repalyMsg.updateLastContent = YES; [self.repalyMsg updateLastSend:UpdateLastSendType_None]; ///修改的 0。-1 JXCell* cell = [_table cellForRowAtIndexPath:[NSIndexPath indexPathForRow:self.replayNum inSection:1]]; //清除badge cell.bage = @"0"; NSMutableArray *array; if (_seekTextField.text.length > 0) { array = _searchArray; }else { array = _array; } JXMsgAndUserObject *p=[array objectAtIndex:self.replayNum]; if (![p.user.userId isEqualToString:FRIEND_CENTER_USERID]) { self.msgTotal -= [cell.bage intValue]; } [UIApplication sharedApplication].applicationIconBadgeNumber = [UIApplication sharedApplication].applicationIconBadgeNumber - [p.user.msgsNew intValue]; // [g_server userChangeMsgNum:[UIApplication sharedApplication].applicationIconBadgeNumber toView:self]; [p.message updateNewMsgsTo0]; [_table reloadRow:self.replayNum section:1]; [g_xmpp sendMessage:self.repalyMsg roomName:roomName]; [self doRefresh:self.repalyMsg showNumber:NO]; } -(void)onHeadImage:(UIView*)sender{ [self doneBtnAction:self.doneBtn]; NSMutableArray *array; if (_seekTextField.text.length > 0) { array = _searchArray; }else { array = _array; } JXMsgAndUserObject *p=[array objectAtIndex:sender.tag]; if([p.user.userId isEqualToString:FRIEND_CENTER_USERID] || [p.user.userId isEqualToString:CALL_CENTER_USERID] || [p.user.userId isEqualToString:SHIKU_TRANSFER]) return; if([p.user.roomFlag boolValue] || p.user.roomId.length > 0) { NSString *s; switch ([p.user.groupStatus intValue]) { case 0: s = nil; break; case 1: s = Localized(@"JX_OutOfTheGroup1"); break; case 2: s = Localized(@"JX_DissolutionGroup1"); break; default: break; } if (s.length > 0) { [g_server showMsg:s]; }else { JXRoomMemberVC* vc = [JXRoomMemberVC alloc]; // vc.chatRoom = [[JXXMPP sharedInstance].roomPool joinRoom:roomdata.roomJid title:roomdata.name isNew:NO]; // vc.room = roomdata; vc.roomId = p.user.roomId; vc.rowIndex = (int)sender.tag; vc = [vc init]; // [g_window addSubview:vc.view]; [g_navigation pushViewController:vc animated:YES]; // [g_server getRoom:p.user.roomId toView:self]; } }else { JXUserInfoVC* vc = [JXUserInfoVC alloc]; vc.user = p.user; vc.userId = p.user.userId; vc.user = p.user; vc.fromAddType = 6; vc = [vc init]; [g_navigation pushViewController:vc animated:YES]; [self cancelBtnAction]; // [g_server getUser:p.user.userId toView:self]; } p = nil; } -(void)getTotalNewMsgCount{ int n = 0; _topNum = 0; for (JXMsgAndUserObject * dict in _array) { if (![dict.user.userId isEqualToString:FRIEND_CENTER_USERID]) { if ([dict.user.offlineNoPushMsg intValue] == 1){ }else{ n += [dict.user.msgsNew intValue]; // NSLog(@"新消息=%d",[dict.user.msgsNew intValue]); } } if (dict.user.topTime) { _topNum ++; } } self.msgTotal = n; [UIApplication sharedApplication].applicationIconBadgeNumber = n; // if (g_xmpp.isLogined) { // [g_server userChangeMsgNum:[UIApplication sharedApplication].applicationIconBadgeNumber toView:self]; // } } - (void)chatViewDisappear:(NSNotification *)notif{ // [_table reloadData]; // [self getTotalNewMsgCount]; // [self getServerData]; } -(void)logoutNotifi:(NSNotification *)notif{ [_array removeAllObjects]; [_table reloadData]; } -(void)insertRoom{ JXUserObject* user = [[JXUserObject alloc]init]; user.userNickname = _room.name; user.userId = _room.roomJid; user.userDescription = _room.desc; user.roomId = _room.roomId; user.content = Localized(@"JX_WelcomeGroupChat"); user.showRead = [NSNumber numberWithBool:_room.showRead]; user.showMember = [NSNumber numberWithBool:_room.showMember]; user.allowSendCard = [NSNumber numberWithBool:_room.allowSendCard]; user.allowInviteFriend = [NSNumber numberWithBool:_room.allowInviteFriend]; user.allowUploadFile = [NSNumber numberWithBool:_room.allowUploadFile]; user.allowSpeakCourse = [NSNumber numberWithBool:_room.allowSpeakCourse]; user.isNeedVerify = [NSNumber numberWithBool:_room.isNeedVerify]; user.createUserId = [NSString stringWithFormat:@"%ld",_room.userId]; user.category = [NSNumber numberWithInteger:510]; // user.groupType = _room.groupType; #ifdef IS_MsgEncrypt user.chatKeyGroup = [g_msgUtil encryptRoomMsgKey:_room.roomId randomKey:_room.chatKeyGroup]; #endif [user insertRoom]; } -(void) didServerResultSucces:(JXConnection*)aDownload dict:(NSDictionary*)dict array:(NSArray*)array1{ [_wait hide]; if ([aDownload.action isEqualToString:act_UserGet]) { NSString *memberAcc= dict[@"membershipAccount"]; [[NSUserDefaults standardUserDefaults] setObject:memberAcc forKey:@"membershipAccount_ID"]; [[NSUserDefaults standardUserDefaults] synchronize]; NSString *gradeIndexcc= dict[@"gradeIndex"]; [[NSUserDefaults standardUserDefaults] setObject:gradeIndexcc forKey:@"gradeIndexcc"]; [[NSUserDefaults standardUserDefaults] synchronize]; NSString *membershipAccount = [[NSUserDefaults standardUserDefaults] objectForKey:@"membershipAccount_ID"]; self.titleLb.text = [NSString stringWithFormat:@"我的即信号:%@",memberAcc]; } //更新本地好友 if ([aDownload.action isEqualToString:act_AttentionList]) { [_wait stop]; [self stopLoading]; JXProgressVC * pv = [JXProgressVC alloc]; // 服务端不会返回新朋友 , 减去新朋友 pv.dbFriends = (long)[_array count] - 1; pv.dataArray = array1; pv = [pv init]; //访问DB获取好友消息列表 // NSMutableArray* p = [[JXMessageObject sharedInstance] fetchRecentChat]; // [g_window addSubview:pv.view]; [self getServerData]; } if([aDownload.action isEqualToString:act_roomList]){ } /* if( [aDownload.action isEqualToString:act_getGroupOneType] ){ _indexNums++; [_tempGoundArr addObject:dict]; if (_reciveNewMessage2222==100) { _dataArrOneOne=_tempGoundArr; [[NSUserDefaults standardUserDefaults] setObject:_indexGoundArr forKey:@"groundType"]; [[NSUserDefaults standardUserDefaults] synchronize]; [_table reloadData]; }else{ if (_indexNums==_array.count) { _indexGoundArr=_tempGoundArr; [[NSUserDefaults standardUserDefaults] setObject:_indexGoundArr forKey:@"groundType"]; [[NSUserDefaults standardUserDefaults] synchronize]; [_table reloadData]; return; }else{ [_indexGoundArr removeAllObjects]; } } //[_tempGoundArr removeAllObjects]; JXCell* cell = [_table cellForRowAtIndexPath:[NSIndexPath indexPathForRow:_reciveScrollViewIndex inSection:0]]; if (dict[@"data"]==nil) { cell.chujiIMG.image=[UIImage imageNamed:dict[@"typeName"]]; }else{ // cell.chujiIMG.image=[UIImage imageNamed:@""]; } [_array enumerateObjectsUsingBlock:^(JXMsgAndUserObject *_Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { JXCell* cell = [_table cellForRowAtIndexPath:[NSIndexPath indexPathForRow:idx inSection:1]]; if (dict[@"data"]==nil) { cell.chujiIMG.image=[UIImage imageNamed:@""]; }else{ if ([dict[@"data"][@"typeName"] isEqualToString:@"普通群"]) { cell.chujiIMG.image=[UIImage imageNamed:@"msgChuji"]; }if ([dict[@"data"][@"typeName"] isEqualToString:@"msgzhongji"]) { cell.chujiIMG.image=[UIImage imageNamed:@"msgChuji"]; }if ([dict[@"data"][@"typeName"] isEqualToString:@"高级群"]) { cell.chujiIMG.image=[UIImage imageNamed:@"msgGaoji"]; }if ([dict[@"data"][@"typeName"] isEqualToString:@"特级群"]) { cell.chujiIMG.image=[UIImage imageNamed:@"msgTeji"]; } } if ([obj.message.fromUserId isEqualToString:@""]) { } }]; } */ if( [aDownload.action isEqualToString:act_roomAdd] ){ _chatRoom = [[JXXMPP sharedInstance].roomPool createRoom:_room.roomJid title:_room.name]; _chatRoom.delegate = self; _room.roomId = [dict objectForKey:@"id"]; [self insertRoom]; memberData *member = [[memberData alloc] init]; member.userId = [g_myself.userId longLongValue]; member.userNickName = MY_USER_NAME; member.role = @1; [_room.members addObject:member]; JXSelectFriendsVC *vc = [JXSelectFriendsVC alloc]; vc.chatRoom = _chatRoom; vc.room = _room; vc.isNewRoom = YES; vc.maxSize = [[dict objectForKey:@"maxUserSize"] intValue] - 1; vc = [vc init]; [g_navigation pushViewController:vc animated:YES]; [g_notify postNotificationName:kUpdateUserNotifaction object:nil]; } //获取弹窗广告响应 if( [aDownload.action isEqualToString:act_getAdvertising] ){ if (dict) { NSArray *buttons = nil; NSString *link = dict[@"link"]; if (link.length > 0) { buttons = @[@"查看更多",@"知道了"]; } else { buttons = @[@"知道了"]; } NSData * data = [NSData dataWithContentsOfURL:[NSURL URLWithString:dict[@"path"]]]; UIImage *image = [UIImage imageWithData:data]; [_alert hide:NO]; //return; //STAlertView *alert = [[STAlertView alloc] initWithTitle:dict[@"name"] image:image message:dict[@"desc"] buttonTitles:buttons]; return; STAlertView *alert = [[STAlertView alloc] initWithTitle:@"最新官方客服" image:image message:@"\n尊敬的客户:吉利最新官方域名 \n\n https://7520.com \n\n 感谢您的支持与信任!祝您游戏愉快" buttonTitles:buttons]; _alert = alert; alert.hideWhenTapOutside = NO; [alert setDidShowHandler:^{ NSLog(@"显示了"); }]; [alert setDidHideHandler:^{ NSLog(@"消失了"); }]; [alert setActionHandler:^(NSInteger index) { switch (index) { case 0: { if (link.length > 0) { NSString *url = link; if ([url rangeOfString:@"http"].location == NSNotFound){ url = [NSString stringWithFormat:@"http://%@", url]; } webpageVC *webVC = [webpageVC alloc]; webVC.isGotoBack = YES; webVC.url = url; webVC = [webVC init]; // [g_navigation.rootViewController.view addSubview:webVC.view]; [g_navigation pushViewController:webVC animated:YES]; } break; } default: break; } }]; [alert show:YES]; } } //点击好友头像响应 if( [aDownload.action isEqualToString:act_UserGet] ){ JXUserObject* user = [[JXUserObject alloc]init]; // _titleLb.text=[NSString stringWithFormat:@"我的即信号%@",g_server.myself.userId]; [user getDataFromDict:dict]; [user updateUserType]; [g_notify postNotificationName:kFriendListRefresh object:nil]; // JXUserInfoVC* vc = [JXUserInfoVC alloc]; // vc.user = user; // vc = [vc init]; //// [g_window addSubview:vc.view]; // [g_navigation pushViewController:vc animated:YES]; // [self cancelBtnAction]; } if( [aDownload.action isEqualToString:act_roomGet] ){ JXUserObject* user = [[JXUserObject alloc]init]; [user getDataFromDict:dict]; NSDictionary * groupDict = [user toDictionary]; roomData * roomdata = [[roomData alloc] init]; [roomdata getDataFromDict:groupDict]; [roomdata getDataFromDict:dict]; JXRoomMemberVC* vc = [JXRoomMemberVC alloc]; vc.chatRoom = [[JXXMPP sharedInstance].roomPool joinRoom:roomdata.roomJid title:roomdata.name lastDate:nil isNew:NO]; vc.room = roomdata; vc = [vc init]; // [g_window addSubview:vc.view]; [g_navigation pushViewController:vc animated:YES]; } if ([aDownload.action isEqualToString:act_roomGetRoom]) { if ([dict objectForKey:@"jid"]) { if (![dict objectForKey:@"member"]) { [g_server showMsg:Localized(@"JX_YouOutOfGroup")]; }else { int talkTime = [[dict objectForKey:@"talkTime"] intValue]; int role = [[(NSDictionary *)[dict objectForKey:@"member"] objectForKey:@"role"] intValue]; if (role == 4) { [g_App showAlert:Localized(@"JX_ProhibitToSpeak")]; return; } if (talkTime > 0) { int role = [[(NSDictionary *)[dict objectForKey:@"member"] objectForKey:@"role"] intValue]; if (role == 1 || role == 2) { if (![self.inputRectView isShow]) { [self showReplayView]; }else { [self sendIt]; } }else { [g_App showAlert:Localized(@"JX_TotalSilence")]; } }else { [g_server getRoomMember:self.replayRoomId userId:[g_myself.userId intValue] toView:self]; } } }else { [g_server showMsg:Localized(@"JX_DissolutionGroup1")]; } } if( [aDownload.action isEqualToString:act_roomMemberGet] ){ long long disableSay = [[dict objectForKey:@"talkTime"] longLongValue]; if ([[NSDate date] timeIntervalSince1970] < disableSay) { [g_App showAlert:Localized(@"HAS_BEEN_BANNED")]; }else { if (![self.inputRectView isShow]) { [self showReplayView]; }else { [self sendIt]; } } } if([aDownload.action isEqualToString:act_roomListHis]){ NSMutableArray *listArr = [NSMutableArray array]; // [[JXXMPP sharedInstance].roomPool joinRoom:tempDict[@"jid"] title:tempDict[@"name"] lastDate:nil isNew:NO]; /*-------------------*/ for (int i = 0; i < [array1 count]; i++) { NSDictionary *dict=array1[i]; JXUserObject* user = [[JXUserObject alloc]init]; user.userNickname = [dict objectForKey:@"name"]; user.userId = [dict objectForKey:@"jid"]; user.userDescription = [dict objectForKey:@"desc"]; user.roomId = [dict objectForKey:@"id"]; user.showRead = [dict objectForKey:@"showRead"]; user.showMember = [dict objectForKey:@"showMember"]; user.allowSendCard = [dict objectForKey:@"allowSendCard"]; user.chatRecordTimeOut = [NSString stringWithFormat:@"%@", [dict objectForKey:@"chatRecordTimeOut"]]; user.offlineNoPushMsg = [(NSDictionary *)[dict objectForKey:@"member"] objectForKey:@"offlineNoPushMsg"]; user.talkTime = [dict objectForKey:@"talkTime"]; user.allowInviteFriend = [dict objectForKey:@"allowInviteFriend"]; user.allowUploadFile = [dict objectForKey:@"allowUploadFile"]; user.allowConference = [dict objectForKey:@"allowConference"]; user.allowSpeakCourse = [dict objectForKey:@"allowSpeakCourse"]; user.category = [dict objectForKey:@"category"]; user.createUserId = [dict objectForKey:@"userId"]; user.timeCreate = [NSDate dateWithTimeIntervalSince1970:[[dict objectForKey:@"createTime"] longLongValue]]; user.isNeedVerify = [dict objectForKey:@"isNeedVerify"]; if([[dict allKeys] containsObject:@"groupType"]) { NSDictionary *dictby=[dict objectForKey:@"groupType"]; user.groupType = [dictby objectForKey:@"typeName"]; }else{ user.groupType = @""; } NSDictionary *member = [dict objectForKey:@"member"]; #ifdef IS_MsgEncrypt if ([member objectForKey:@"chatKeyGroup"]) { user.chatKeyGroup = [g_msgUtil encryptRoomMsgKey:user.roomId randomKey:[member objectForKey:@"chatKeyGroup"]]; } #endif if ([aDownload.action isEqualToString:act_roomListHis]) { if(user && [user.groupStatus intValue] == 0){ [[JXXMPP sharedInstance].roomPool joinRoom:user.userId title:user.userNickname lastDate:nil isNew:YES]; } if (![user haveTheUser]){ [user insertRoom]; }else { [user updateUserNickname]; // [user update]; // 只更新groupType [user updateGroupType]; [user updateRoomId]; } } /******************** ****************************/ // 如果最近一条信息接口没有获取到,就更新 if ([[dict objectForKey:@"jid"] intValue] > 0 && !_isGetLastMsgList) { // 获取最近一条记录 NSArray *arr = [[JXMessageObject sharedInstance] fetchMessageListWithUser:[dict objectForKey:@"jid"] byAllNum:0 pageCount:20 startTime:[NSDate dateWithTimeIntervalSince1970:0]]; // 去除 JXMessageObject *lastMsg = arr.lastObject; if (!lastMsg) { lastMsg = arr.firstObject; } JXUserObject *user = [[JXUserObject sharedInstance] getUserById:dict[@"jid"]]; NSMutableDictionary *taskDic = [NSMutableDictionary dictionary]; [taskDic setObject:[dict objectForKey:@"jid"] forKey:@"userId"]; [taskDic setObject:[NSDate dateWithTimeIntervalSince1970:[dict[@"timeSend"] longLongValue]] forKey:@"lastTime"]; if (lastMsg) { [taskDic setObject:lastMsg.timeSend forKey:@"startTime"]; if (lastMsg.messageId) { [taskDic setObject:lastMsg.messageId forKey:@"startMsgId"]; } } if (user.roomId) { [taskDic setObject:user.roomId forKey:@"roomId"]; } if ([g_myself.chatSyncTimeLen longLongValue] != -2) { [self createSynTask:taskDic]; [_taskArray addObject:taskDic]; } long value = (long)([lastMsg.timeSend timeIntervalSince1970]*1000); if (!lastMsg) { // 没有最后一条消息的记录就拉取一周前的数据 value = (long)(g_server.lastOfflineTime*1000)-(7*24*3600*1000); } NSString *listStr = [NSString stringWithFormat:@"%@,%ld",dict[@"jid"],value]; [listArr addObject:listStr]; } /******************** ****************************/ // [tempArray addObject:user]; } /*-------------------*/ if (listArr.count > 0) { dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ // 如果最近一条信息接口没有获取到,批量拉取消息 if (!_isGetLastMsgList) { [g_xmpp pullBatchGroupMessageReqWithJidListArray:listArr]; } }); } [_table reloadData]; } if ([aDownload.action isEqualToString:act_tigaseGetLastChatList]) { [self.header endRefreshing]; _isGetLastMsgList = YES; [g_default setBool:YES forKey:kISFirstGetLastChatList]; if ([g_myself.chatSyncTimeLen longLongValue] != -2) { [[JXUserObject sharedInstance] updateUserLastChatList:array1]; if (array1.count > 0) { [self getServerData]; } } [_taskArray removeAllObjects]; NSMutableArray *listArr = [NSMutableArray array]; // 获取到群组本地最后一条消息 for (NSInteger i = 0; i < array1.count; i ++) { NSDictionary *dict = array1[i]; if ([[dict objectForKey:@"isRoom"] intValue] == 1) { // 获取最近一条记录 NSArray *arr = [[JXMessageObject sharedInstance] fetchMessageListWithUser:[dict objectForKey:@"jid"] byAllNum:0 pageCount:20 startTime:[NSDate dateWithTimeIntervalSince1970:0]]; // 去除 JXMessageObject *lastMsg = arr.lastObject; // lastMsg.content // for (NSInteger i = arr.count - 1; i > 0; i --) { // JXMessageObject *firstMsg = arr[i]; // if ([firstMsg.type integerValue] != kWCMessageTypeRemind) { // lastMsg = firstMsg; // break; // } // } if (!lastMsg) { // continue; lastMsg = arr.firstObject; } JXUserObject *user = [[JXUserObject sharedInstance] getUserById:dict[@"jid"]]; NSMutableDictionary *taskDic = [NSMutableDictionary dictionary]; [taskDic setObject:[dict objectForKey:@"jid"] forKey:@"userId"]; [taskDic setObject:[NSDate dateWithTimeIntervalSince1970:[dict[@"timeSend"] longLongValue]] forKey:@"lastTime"]; if (lastMsg) { [taskDic setObject:lastMsg.timeSend forKey:@"startTime"]; if (lastMsg.messageId) { [taskDic setObject:lastMsg.messageId forKey:@"startMsgId"]; } } if (user.roomId) { [taskDic setObject:user.roomId forKey:@"roomId"]; } if ([g_myself.chatSyncTimeLen longLongValue] != -2) { [self createSynTask:taskDic]; [_taskArray addObject:taskDic]; } long value = (long)([lastMsg.timeSend timeIntervalSince1970]*1000); if (!lastMsg) { // 没有最后一条消息的记录就拉取一周前的数据 value = (long)(g_server.lastOfflineTime*1000)-(7*24*3600*1000); } NSString *listStr = [NSString stringWithFormat:@"%@,%ld",dict[@"jid"],value]; [listArr addObject:listStr]; } } if (listArr.count > 0) { dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ [g_xmpp pullBatchGroupMessageReqWithJidListArray:listArr]; }); } [self getAllChatList]; [self getFriend]; // [g_xmpp.roomPool createAll]; } if ([aDownload.action isEqualToString:act_customerLinkList]) { self.customerArr = array1; return; CGRect backFrame = self.backView.frame; backFrame.size.height = backFrame.size.height + 64* self.customerArr.count; self.backView.frame = backFrame; if (array1.count == 0) { return; } // int cY = _menuView.frame.origin.y + _menuView.frame.size.height; int cY = 50; for (int i = 0; i < self.customerArr.count; i++) { UIView *customerView = [[UIView alloc] initWithFrame:CGRectMake(0, cY + 64 * i, self_width, 64)]; // customerView.backgroundColor = [UIColor redColor]; // UIView *lineView2 = [[UIView alloc] initWithFrame:CGRectMake(0, 0, JX_SCREEN_WIDTH, .5)]; // lineView2.backgroundColor = HEXCOLOR(0xdcdcdc); // [customerView addSubview:lineView2]; UIImageView *imageView2 = [[UIImageView alloc] initWithFrame:CGRectMake(15, 6, 52, 52)]; NSString *fileURL = array1[i][@"path"]; NSData * data = [NSData dataWithContentsOfURL:[NSURL URLWithString:fileURL]]; UIImage *image = [UIImage imageWithData:data]; if (image) { imageView2.image = image; }else { imageView2.image = [UIImage imageNamed:@"im_10000"]; } [customerView addSubview:imageView2]; UIButton *customerBtn = [[UIButton alloc] initWithFrame:CGRectMake(imageView2.frame.origin.x+imageView2.frame.size.width + 14, imageView2.frame.origin.y, self_width-imageView2.frame.size.width-15+20, 40)]; // [customerBtn setTitle:@"威尼斯客服" forState:UIControlStateNormal]; if (array1[i][@"name"]) { [customerBtn setTitle:array1[i][@"name"] forState:UIControlStateNormal]; }else { // imageView2.image = [UIImage imageNamed:@"im_10000"]; [customerBtn setTitle:@"--" forState:UIControlStateNormal]; } // [customerBtn ] customerBtn.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft; // customerBtn.titleEdgeInsets = UIEdgeInsetsMake(0, 10, 0, 0); // customerBtn.backgroundColor = UIColor.redColor; [customerBtn setTitleColor:[UIColor blackColor] forState:UIControlStateNormal]; [customerBtn addTarget:self action:@selector(customerClick:) forControlEvents:UIControlEventTouchUpInside]; customerBtn.tag = i+1; customerBtn.titleLabel.font = [UIFont systemFontOfSize:16]; [customerView addSubview:customerBtn]; UILabel *hintLabel = [[UILabel alloc] initWithFrame:CGRectMake(self_width - 40, customerBtn.frame.origin.y + customerBtn.frame.size.height - 15, 40, 15)]; if (array1[i][@"type"]) { hintLabel.text = array1[i][@"type"]; }else{ hintLabel.text = @"--"; } hintLabel.font = [UIFont systemFontOfSize:13]; hintLabel.backgroundColor = UIColor.clearColor; hintLabel.textColor = UIColor.blackColor; hintLabel.textAlignment = NSTextAlignmentCenter; [customerView addSubview:hintLabel]; UIView *lineView2 = [[UIView alloc] initWithFrame:CGRectMake(customerBtn.frame.origin.x, 63.5, customerBtn.frame.size.width, .5)]; lineView2.backgroundColor = HEXCOLOR(0xdcdcdc); [customerView addSubview:lineView2]; [self.backView addSubview:customerView]; [self.tableView reloadData]; } } if ([aDownload.action isEqualToString:act_roomMemberSetOfflineNoPushMsg] || [aDownload.action isEqualToString:act_friendsUpdateOfflineNoPushMsg]) { JXMsgAndUserObject *p = self.tempMsgAndUserObject; [_array removeObject:p]; if (p.user.topTime) { p.user.topTime = nil; if (_topNum > 0) _topNum --; [_array insertObject:p atIndex:_topNum]; }else { p.user.topTime = [NSDate date]; _topNum ++; [_array insertObject:p atIndex:0]; } [p.user updateTopTime]; [_table reloadData]; } } -(int) didServerResultFailed:(JXConnection*)aDownload dict:(NSDictionary*)dict{ [_wait hide]; if ([aDownload.action isEqualToString:act_tigaseGetLastChatList]) { _isGetLastMsgList = NO; [self.header endRefreshing]; [self getAllChatList]; //[self getFriend]; // [g_xmpp.roomPool createAll]; } if ([aDownload.action isEqualToString:act_getGroupOneType]) { [_table reloadData]; } // if (![aDownload.action isEqualToString:act_userChangeMsgNum] && ![aDownload.action isEqualToString:act_tigaseGetLastChatList]) { // return show_error; // } return hide_error; } -(int) didServerConnectError:(JXConnection*)aDownload error:(NSError *)error{//error为空时,代表超时 [_wait hide]; [self.header endRefreshing]; // if (![aDownload.action isEqualToString:act_userChangeMsgNum] && ![aDownload.action isEqualToString:act_tigaseGetLastChatList]) { // return show_error; // } if ([aDownload.action isEqualToString:act_getGroupOneType]) { [_table reloadData]; } return hide_error; } -(void) didServerConnectStart:(JXConnection*)aDownload{ // if (![aDownload.action isEqualToString:act_userChangeMsgNum] && ![aDownload.action isEqualToString:act_roomMemberGet] && ![aDownload.action isEqualToString:act_roomGetRoom]) { // [_wait start]; // } } -(void)onDrag:(UIView*)sender{ sender.hidden = YES; } //收到加好友通知 -(void)onReceiveRoomRemind:(NSNotification *)notifacation// { JXRoomRemind* p = (JXRoomRemind *)notifacation.object; JXUserObject* user = [[JXUserObject sharedInstance] getUserById:p.objectId];//如果能查到,说明是群组,否则是直播间 if (p.isGroup) { // NSLog(@"已读 群消息回执:%@",[p mj_keyValues]); }else{ // NSLog(@"已读个人消息回执:%@",[p mj_keyValues]); } BOOL bRefresh=NO; if([p.type intValue] == kRoomRemind_RoomName){ if(!user) return; user.userNickname = p.content; [user update]; for(int i=0;i<[_array count];i++){ JXMsgAndUserObject* room=[_array objectAtIndex:i]; if([room.user.userId isEqualToString:p.objectId]){ room.user.userNickname = p.content; bRefresh = YES; break; } room = nil; } } if([p.type intValue] == kRoomRemind_NickName){ memberData *data = [[memberData alloc] init]; data.roomId = user.roomId; data.userNickName = p.content; data.userId = [p.toUserId longLongValue]; [data updateUserNickName]; } if([p.type intValue] == kRoomRemind_DelMember){ if(!user) return; if([p.toUserId rangeOfString:MY_USER_ID].location != NSNotFound){ if ([p.fromUserId isEqualToString:MY_USER_ID]) { [JXUserObject deleteUserAndMsg:user.userId]; } user.groupStatus = [NSNumber numberWithInt:1]; [user updateGroupInvalid]; for (JXMsgAndUserObject *obj in _array) { if ([obj.user.userId isEqualToString:user.userId]) { obj.user.groupStatus = [NSNumber numberWithInt:1]; break; } } [g_xmpp.roomPool delRoom:user.userId]; }else{ // [[JXMessageObject sharedInstance] deleteWithFromUser:p.toUserId roomId:user.userId]; // if ([p.fromUserId isEqualToString:MY_USER_ID]) { // [userObj.user delete]; // [_array removeObject:userObj]; // [_table reloadData]; // } } JXMsgAndUserObject *userObj = nil; for (JXMsgAndUserObject *obj in _array) { if ([obj.user.userId isEqualToString:user.userId]) { userObj = obj; memberData* member = [[memberData alloc] init]; member.userId = [p.toUserId intValue]; member.userNickName = p.toUserName; member.roomId = user.roomId; [member remove]; NSDictionary * groupDict = [user toDictionary]; roomData * roomdata = [[roomData alloc] init]; [roomdata getDataFromDict:groupDict]; roomdata.roomId = user.roomId; roomdata.members = roomdata.members; break; } } NSString *groupImagePath = [NSString stringWithFormat:@"%@%@/%@.%@",NSTemporaryDirectory(),g_myself.userId,user.userId,@"jpg"]; NSError * error = nil; [[NSFileManager defaultManager] removeItemAtPath:groupImagePath error:&error]; } if([p.type intValue] == kRoomRemind_AddMember){ // [self getAllChatList]; if([p.toUserId isEqualToString:MY_USER_ID] || IS_OTHER_DEVICE(p.toUserId)){ if(![g_xmpp.roomPool getRoom:p.objectId]){ JXUserObject* user = [[JXUserObject alloc]init]; user.userNickname = p.content; user.userId = p.objectId; user.userDescription = p.content; user.roomId = p.roomId; // user.showRead = p.fileSize; SBJsonParser * resultParser = [[SBJsonParser alloc] init] ; NSDictionary *resultObject = [resultParser objectWithString:p.other]; user.showMember = resultObject[@"showMember"]; user.allowSendCard = resultObject[@"allowSendCard"]; user.showRead = resultObject[@"showRead"]; user.talkTime = resultObject[@"talkTime"]; user.allowInviteFriend = resultObject[@"allowInviteFriend"]; user.allowUploadFile = resultObject[@"allowUploadFile"]; user.allowConference = resultObject[@"allowConference"]; user.allowSpeakCourse = resultObject[@"allowSpeakCourse"]; user.chatRecordTimeOut = resultObject[@"chatRecordTimeOut"]; user.isNeedVerify = resultObject[@"isNeedVerify"]; #ifdef IS_MsgEncrypt if ([resultObject objectForKey:@"chatKeyGroup"]) { SecKeyRef priKey = [g_securityUtil getRSAKeyWithBase64Str:g_msgUtil.rsaPrivateKey isPrivateKey:YES]; NSString *chatKeyGroup = [resultObject objectForKey:@"chatKeyGroup"]; NSData *chatKeyData = [[NSData alloc] initWithBase64EncodedString:chatKeyGroup options:NSDataBase64DecodingIgnoreUnknownCharacters]; NSData *deData = [g_securityUtil decryptMessageRSA:chatKeyData withPrivateKey:priKey]; chatKeyGroup = [[NSString alloc] initWithData:deData encoding:NSUTF8StringEncoding]; user.chatKeyGroup = [g_msgUtil encryptRoomMsgKey:user.roomId randomKey:chatKeyGroup]; } #endif [user insertRoom]; JXRoomObject *chatRoom = [g_xmpp.roomPool joinRoom:user.userId title:user.userNickname lastDate:p.time isNew:NO]; chatRoom.delegate = self; bRefresh = YES; } } JXUserObject* user = [[JXUserObject alloc]init]; user.userId = p.objectId; user.groupStatus = [NSNumber numberWithInt:0]; [user updateGroupInvalid]; for (JXMsgAndUserObject *obj in _array) { if ([obj.user.userId isEqualToString:user.userId]) { obj.user.groupStatus = [NSNumber numberWithInt:0]; break; } } for (JXMsgAndUserObject *obj in _array) { if ([obj.user.userId isEqualToString:user.userId]) { memberData* member = [[memberData alloc] init]; member.userId = [p.toUserId intValue]; member.userNickName = p.toUserName; member.roomId = p.roomId; [member insert]; NSDictionary * groupDict = [obj.user toDictionary]; roomData * roomdata = [[roomData alloc] init]; [roomdata getDataFromDict:groupDict]; roomdata.roomId = obj.user.roomId; roomdata.members = roomdata.members; break; } } if ([p.fromUserId isEqualToString:MY_USER_ID]) { self.roomRemind = p; JXRoomObject *chatRoom = [g_xmpp.roomPool joinRoom:p.objectId title:p.content lastDate:nil isNew:YES]; chatRoom.delegate = self; [chatRoom joinRoom:YES]; } NSString *groupImagePath = [NSString stringWithFormat:@"%@%@/%@.%@",NSTemporaryDirectory(),g_myself.userId,user.userId,@"jpg"]; NSError * error = nil; [[NSFileManager defaultManager] removeItemAtPath:groupImagePath error:&error]; [self getServerData]; } if([p.type intValue] == kRoomRemind_DelRoom){ if(!user) return; // [JXUserObject deleteUserAndMsg:user.userId]; user.groupStatus = [NSNumber numberWithInt:2]; [user updateGroupInvalid]; JXMsgAndUserObject *userObj = nil; for (JXMsgAndUserObject *obj in _array) { if ([obj.user.userId isEqualToString:user.userId]) { userObj = obj; obj.user.groupStatus = [NSNumber numberWithInt:2]; break; } } if ([p.fromUserId isEqualToString:MY_USER_ID]) { [userObj.user delete]; [_array removeObject:userObj]; [_table reloadData]; } [g_xmpp.roomPool delRoom:user.userId]; } if([p.type intValue] == kRoomRemind_ShowRead){ BOOL bFound=NO; JXMsgAndUserObject *obj=nil; for(int i=0;i<[_array count];i++){ obj=[_array objectAtIndex:i]; if([obj.user.userId isEqualToString:p.objectId]){ obj.user.showRead = [NSNumber numberWithInt:[p.content intValue]]; [obj.user update]; bFound = YES; break; } } if(!bFound){ JXUserObject* user = [[JXUserObject sharedInstance] getUserById:p.objectId]; user.showRead = [NSNumber numberWithInt:[p.content intValue]]; [user update]; } } if([p.type intValue] == kRoomRemind_ShowMember){ BOOL bFound=NO; JXMsgAndUserObject *obj=nil; for(int i=0;i<[_array count];i++){ obj=[_array objectAtIndex:i]; if([obj.user.userId isEqualToString:p.objectId]){ obj.user.showMember = [NSNumber numberWithInt:[p.content intValue]]; [obj.user update]; bFound = YES; break; } } if(!bFound){ JXUserObject* user = [[JXUserObject sharedInstance] getUserById:p.objectId]; user.showMember = [NSNumber numberWithInt:[p.content intValue]]; [user update]; } } if([p.type intValue] == kRoomRemind_allowSendCard){ BOOL bFound=NO; JXMsgAndUserObject *obj=nil; for(int i=0;i<[_array count];i++){ obj=[_array objectAtIndex:i]; if([obj.user.userId isEqualToString:p.objectId]){ obj.user.allowSendCard = [NSNumber numberWithInt:[p.content intValue]]; [obj.user update]; bFound = YES; break; } } if(!bFound){ JXUserObject* user = [[JXUserObject sharedInstance] getUserById:p.objectId]; user.allowSendCard = [NSNumber numberWithInt:[p.content intValue]]; [user update]; } } if ([p.type intValue] == kRoomRemind_SetManage) { //设置群组管理员 JXUserObject *user = [[JXUserObject sharedInstance] getUserById:p.objectId]; NSDictionary * groupDict = [user toDictionary]; roomData * roomdata = [[roomData alloc] init]; [roomdata getDataFromDict:groupDict]; NSArray * allMem = [memberData fetchAllMembers:user.roomId]; roomdata.members = [allMem mutableCopy]; memberData *member = [roomdata getMember:p.toUserId]; if ([member.role intValue] == 2) { member.role = [NSNumber numberWithInt:3]; }else { member.role = [NSNumber numberWithInt:2]; } [member update]; } if([p.type intValue] == kRoomRemind_RoomAllBanned){ if ([p.userId isEqualToString:MY_USER_ID]) { return; } if ([self.repalyMsg.toUserId isEqualToString:p.objectId]) { [self.inputRectView hide]; } BOOL bFound=NO; JXMsgAndUserObject *obj=nil; for(int i=0;i<[_array count];i++){ obj=[_array objectAtIndex:i]; if([obj.user.userId isEqualToString:p.objectId]){ obj.user.talkTime = [NSNumber numberWithLong:[p.content longLongValue]]; [obj.user updateGroupTalkTime]; bFound = YES; break; } } if(!bFound){ JXUserObject* user = [[JXUserObject sharedInstance] getUserById:p.objectId]; user.talkTime = [NSNumber numberWithLong:[p.content longLongValue]]; [user updateGroupTalkTime]; } } if([p.type intValue] == kRoomRemind_RoomAllowInviteFriend){ BOOL bFound=NO; JXMsgAndUserObject *obj=nil; for(int i=0;i<[_array count];i++){ obj=[_array objectAtIndex:i]; if([obj.user.userId isEqualToString:p.objectId]){ obj.user.allowInviteFriend = [NSNumber numberWithInt:[p.content intValue]]; [obj.user update]; bFound = YES; break; } } if(!bFound){ JXUserObject* user = [[JXUserObject sharedInstance] getUserById:p.objectId]; user.allowSendCard = [NSNumber numberWithInt:[p.content intValue]]; [user update]; } } if([p.type intValue] == kRoomRemind_RoomAllowUploadFile){ BOOL bFound=NO; JXMsgAndUserObject *obj=nil; for(int i=0;i<[_array count];i++){ obj=[_array objectAtIndex:i]; if([obj.user.userId isEqualToString:p.objectId]){ obj.user.allowUploadFile = [NSNumber numberWithInt:[p.content intValue]]; [obj.user update]; bFound = YES; break; } } if(!bFound){ JXUserObject* user = [[JXUserObject sharedInstance] getUserById:p.objectId]; user.allowUploadFile = [NSNumber numberWithInt:[p.content intValue]]; [user update]; } } if([p.type intValue] == kRoomRemind_RoomAllowConference){ BOOL bFound=NO; JXMsgAndUserObject *obj=nil; for(int i=0;i<[_array count];i++){ obj=[_array objectAtIndex:i]; if([obj.user.userId isEqualToString:p.objectId]){ obj.user.allowConference = [NSNumber numberWithInt:[p.content intValue]]; [obj.user update]; bFound = YES; break; } } if(!bFound){ JXUserObject* user = [[JXUserObject sharedInstance] getUserById:p.objectId]; user.allowConference = [NSNumber numberWithInt:[p.content intValue]]; [user update]; } } if([p.type intValue] == kRoomRemind_RoomAllowSpeakCourse){ BOOL bFound=NO; JXMsgAndUserObject *obj=nil; for(int i=0;i<[_array count];i++){ obj=[_array objectAtIndex:i]; if([obj.user.userId isEqualToString:p.objectId]){ obj.user.allowSpeakCourse = [NSNumber numberWithInt:[p.content intValue]]; [obj.user update]; bFound = YES; break; } } if(!bFound){ JXUserObject* user = [[JXUserObject sharedInstance] getUserById:p.objectId]; user.allowSpeakCourse = [NSNumber numberWithInt:[p.content intValue]]; [user update]; } } if ([p.type intValue] == kRoomRemind_RoomTransfer) { JXUserObject *user = [[JXUserObject sharedInstance] getUserById:p.objectId]; memberData *data = [[memberData alloc] init]; data.userId = [p.fromUserId longLongValue]; data.roomId = user.roomId; data.role = [NSNumber numberWithInt:3]; [data updateRole]; data = [[memberData alloc] init]; data.userId = [p.toUserId longLongValue]; data.roomId = user.roomId; data.role = [NSNumber numberWithInt:1]; [data updateRole]; } if ([p.type intValue] == kRoomRemind_SetRecordTimeOut) { JXUserObject *user = [[JXUserObject sharedInstance] getUserById:p.objectId]; user.chatRecordTimeOut = p.content; [user updateUserChatRecordTimeOut]; } if(bRefresh){ _refreshCount++; [_table reloadData]; [self getTotalNewMsgCount]; } p = nil; } -(void)xmppRoomDidJoin{ JXUserObject* user = [[JXUserObject alloc]init]; user.userNickname = self.roomRemind.content; user.userId = self.roomRemind.objectId; user.userDescription = nil; user.roomId = self.roomRemind.roomId; SBJsonParser * resultParser = [[SBJsonParser alloc] init] ; NSDictionary *resultObject = [resultParser objectWithString:self.roomRemind.other]; user.showRead = [resultObject objectForKey:@"showRead"]; user.showMember = [resultObject objectForKey:@"showMember"]; user.allowSendCard = [resultObject objectForKey:@"allowSendCard"]; user.talkTime = [resultObject objectForKey:@"talkTime"]; user.allowInviteFriend = [resultObject objectForKey:@"allowInviteFriend"]; user.allowUploadFile = [resultObject objectForKey:@"allowUploadFile"]; user.allowConference = [resultObject objectForKey:@"allowConference"]; user.allowSpeakCourse = [resultObject objectForKey:@"allowSpeakCourse"]; user.chatRecordTimeOut = [resultObject objectForKey:@"chatRecordTimeOut"]; user.isNeedVerify = [resultObject objectForKey:@"isNeedVerify"]; if (![user haveTheUser]) [user insertRoom]; // else // [user update]; } -(void)onQuitRoom:(NSNotification *)notifacation//超时未收到回执 { JXRoomObject* p = (JXRoomObject *)notifacation.object; for(int i=0;i<[_array count];i++){ JXMsgAndUserObject* room=[_array objectAtIndex:i]; if([room.user.userId isEqualToString:p.roomJid]){ [_array removeObjectAtIndex:i]; _refreshCount++; [_table reloadData]; [self getTotalNewMsgCount]; break; } room = nil; } p = nil; } -(void)onSearch{ JXSearchUserVC* vc = [JXSearchUserVC alloc]; vc.delegate = self; vc.didSelect = @selector(doSearch:); vc.type = JXSearchTypeUser; // [g_window addSubview:vc.view]; vc = [vc init]; [g_navigation pushViewController:vc animated:YES]; [self cancelBtnAction]; } -(void)doSearch:(searchData*)p{ JXNearVC *nearVC = [[JXNearVC alloc]init]; nearVC.isSearch = YES; // [g_window addSubview:nearVC.view]; [g_navigation pushViewController:nearVC animated:YES]; // nearVC.search = p; // nearVC.bNearOnly = NO; // nearVC.page = 0;; // nearVC.selMenu = 0; // [nearVC getServerData]; [nearVC doSearch:p]; } //新消息刷新 -(void)allMsgCome{ if (_isLoadingData) { return; } _isLoadingData = YES; [self getServerData]; _isLoadingData = NO; } -(void)showNewCount{//显示IM数量 // [g_mainVC.tb setBadge:0 title:[NSString stringWithFormat:@"%d",self.msgTotal]]; int num = 0; if (g_App.linkArray.count == 0) { num = 0; }else if(g_App.linkArray.count == 1){ num = 1; }else if(g_App.linkArray.count == 2){ num = 1; } [g_mainVC.tb setBadge:num title:[NSString stringWithFormat:@"%d",self.msgTotal]]; } -(void)setMsgTotal:(int)n{ if(n<0) n = 0; _msgTotal = n; [self showNewCount]; } -(void)showScanViewController{ // button.enabled = NO; // dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0f * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ // button.enabled = YES; // }); AVAuthorizationStatus authStatus = [AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeVideo]; if (authStatus == AVAuthorizationStatusRestricted || authStatus ==AVAuthorizationStatusDenied) { [g_server showMsg:Localized(@"JX_CanNotopenCenmar")]; return; } JXScanQRViewController * scanVC = [[JXScanQRViewController alloc] init]; // [g_window addSubview:scanVC.view]; [g_navigation pushViewController:scanVC animated:YES]; } -(void)customerClick:(UIButton *)sender{ // UIButton *btn = (UIButton *)[self.view viewWithTag:sender.tag]; if (self.customerArr[sender.tag - 1][@"link"]) { CYWebCustomerServiceVC *vc = [[CYWebCustomerServiceVC alloc] init]; vc.titleName = self.customerArr[sender.tag - 1][@"name"]; vc.link = self.customerArr[sender.tag - 1][@"link"]; [self presentViewController:vc animated:YES completion:^{ }]; }else { NSLog(@"链接不存在!!!!!!!!"); } } -(void)navGuese{ // id traget = self.navigationController.interactivePopGestureRecognizer.delegate; // UIPanGestureRecognizer * pan = [[UIPanGestureRecognizer alloc]initWithTarget:traget action:nil]; // [self.tableView addGestureRecognizer:pan]; // 添加滑动手势 /** 轻扫 */ // UISwipeGestureRecognizer * swipeLeft = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipeAction:)]; // // swipeLeft.direction = UISwipeGestureRecognizerDirectionLeft; // [self.view addGestureRecognizer:swipeLeft]; // 手势的优先级 优先响应swipe手势 // [pan requireGestureRecognizerToFail:swipeLeft]; //[pan requireGestureRecognizerToFail:swipeRight]; } @end