JXGroupViewController.m 36 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018
  1. //
  2. // JXGroupViewController.m
  3. // BaseProject
  4. //
  5. // Created by Huan Cho on 13-8-3.
  6. // Copyright (c) 2013年 ch. All rights reserved.
  7. //
  8. #import "JXGroupViewController.h"
  9. //#import "Statics.h"
  10. //#import "KKMessageCell.h"
  11. //#import "XMPPStream.h"
  12. #import "JXMessageObject.h"
  13. #import "JXXMPP.h"
  14. #import "JXChatViewController.h"
  15. #import "AppDelegate.h"
  16. #import "JXLabel.h"
  17. #import "JXImageView.h"
  18. #import "JXCell.h"
  19. #import "JXRoomPool.h"
  20. #import "JXTableView.h"
  21. #import "JXRoomMemberVC.h"
  22. #import "JXRoomObject.h"
  23. #import "JXSelFriendVC.h"
  24. #import "JXNewRoomVC.h"
  25. #import "menuImageView.h"
  26. #import "JXUserInfoVC.h"
  27. #import "JXRoomRemind.h"
  28. #import "JXInputVC.h"
  29. #import "JXCommonInputVC.h"
  30. #import "JXSearchGroupVC.h"
  31. #import "JXSelectFriendsVC.h"
  32. //#import "JXTableViewController.h"
  33. #import "JXSearchUserVC.h"
  34. #import "UIBarButtonItem+XMGExtension.h"
  35. #import "JXSelectFriendsVC.h"
  36. #import "JXChatViewC.h"
  37. #define Scroll_Move 45
  38. #define padding 20
  39. @interface JXGroupViewController()<UITextFieldDelegate,JXNewFriendToSearVcVCDelegate,JXRoomObjectDelegate,JXCommonInputVCDelegate>{
  40. NSMutableArray * _myGroupArray;
  41. NSMutableArray * _allGroupArray;
  42. }
  43. @property (nonatomic, copy) NSString *roomJid;
  44. @property (nonatomic, copy) NSString *roomUserId;
  45. @property (nonatomic, copy) NSString *roomUserName;
  46. @property (nonatomic, strong) UITextField *searchfield;//搜索框
  47. @property (nonatomic, strong) NSMutableArray *currentGroupArray;//保存搜索到的群组
  48. @property (nonatomic,weak) UILabel *footeView;
  49. @end
  50. @implementation JXGroupViewController
  51. #pragma mark - life circle
  52. -(void)clickNewAdd2{
  53. [g_navigation dismissViewController:self animated:YES];
  54. }
  55. - (void)addFriendCLickk{
  56. if ([g_config.isCommonCreateGroup intValue] == 1) {
  57. [g_App showAlert:Localized(@"JX_NotCreateNewRoom")];
  58. return;
  59. }
  60. // JXNewRoomVC* vc = [[JXNewRoomVC alloc]init];
  61. // [g_navigation pushViewController:vc animated:YES];
  62. JXSelectFriendsVC *vc = [JXSelectFriendsVC alloc];
  63. vc.isPlusButtonComming = YES;
  64. vc = [vc init];
  65. [g_navigation pushViewController:vc animated:YES];
  66. }
  67. -(void)defineNavPushAbbGoundBar33:(NSString *)title and:(NSString *)btnIMG
  68. {
  69. UIView *navView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, JX_SCREEN_WIDTH,JX_SCREEN_HEIGHT>=812?88:64)];
  70. navView.backgroundColor = [UIColor whiteColor];
  71. [self.view addSubview:navView];
  72. UIButton *backBtn = [UIButton buttonWithType:UIButtonTypeCustom];
  73. backBtn.frame = CGRectMake(0,JX_STATUSBAR_H,50, 44);
  74. [backBtn setImage:[UIImage imageNamed:@"title_back_black"] forState:0];
  75. [backBtn addTarget:self action:@selector(clickNewAdd2) forControlEvents:UIControlEventTouchUpInside];
  76. [navView addSubview:backBtn];
  77. [navView addSubview:backBtn];
  78. UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(50,JX_STATUSBAR_H, JX_SCREEN_WIDTH-100, 44)];
  79. label.text = title;
  80. label.textColor =[UIColor blackColor];
  81. label.textAlignment = NSTextAlignmentCenter;
  82. label.font=[UIFont systemFontOfSize:18 weight:UIFontWeightMedium];
  83. [navView addSubview:label];
  84. UIButton *addFriend = [UIButton buttonWithType:UIButtonTypeCustom];
  85. addFriend.frame = CGRectMake(JX_SCREEN_WIDTH-55,JX_STATUSBAR_H,44, 44);
  86. [addFriend setImage:[UIImage imageNamed:btnIMG] forState:0];
  87. [addFriend addTarget:self action:@selector(addFriendCLickk) forControlEvents:UIControlEventTouchUpInside];
  88. [navView addSubview:addFriend];
  89. }
  90. - (id)init
  91. {
  92. self = [super init];
  93. if (self) {
  94. // self.title = @"";
  95. self.heightHeader = JX_SCREEN_TOP;
  96. self.heightFooter = 0;
  97. self.title = @"群聊"; Localized(@"JX_ManyPerChat");
  98. // self.view.frame = CGRectMake(0, 0, JX_SCREEN_WIDTH, JX_SCREEN_HEIGHT-JX_SCREEN_BOTTOM);
  99. self.isGotoBack = YES;
  100. [self createHeadAndFoot];
  101. [self defineNavPushAbbGoundBar33:@"群聊" and:@"im_003_more_button_black"];
  102. self.tableView.backgroundColor = HEXCOLOR(0xF2F2F2);
  103. self.tableView.frame=CGRectMake(0, JX_SCREEN_TOP, JX_SCREEN_WIDTH, JX_SCREEN_HEIGHT-JX_SCREEN_TOP);
  104. UILabel *footeView=[[UILabel alloc]init];
  105. footeView.frame=CGRectMake(0, 0, JX_SCREEN_WIDTH, 60);
  106. footeView.textColor=kRGBColor(51, 51, 51);
  107. footeView.textAlignment=NSTextAlignmentCenter;
  108. self.footeView=footeView;
  109. self.tableView.tableFooterView=footeView;
  110. // CGRect frame = self.tableView.frame;
  111. // frame.origin.y += 40;
  112. // frame.size.height -= 40;
  113. // self.tableView.frame = frame;
  114. [self customView];
  115. NSString *image = THESIMPLESTYLE ? @"im_003_more_button_black" : @"im_003_more_button_normal";
  116. UIButton* btn = [UIFactory createButtonWithImage:image
  117. highlight:nil
  118. target:self
  119. selector:@selector(onNewRoom)];
  120. btn.frame = CGRectMake(JX_SCREEN_WIDTH -15-18, JX_SCREEN_TOP-15-18, 18, 18);
  121. [self.tableHeader addSubview:btn];
  122. UIView *backView = [[UIView alloc] initWithFrame:CGRectMake(0, JX_SCREEN_TOP, JX_SCREEN_WIDTH, 50)];
  123. backView.backgroundColor=HEXCOLOR(0xF2F2F2);
  124. [self.view addSubview:backView];
  125. _searchfield = [[UITextField alloc] initWithFrame:CGRectMake(15, 10, backView.frame.size.width - 30, 35)];
  126. _searchfield.placeholder = Localized(@"JX_Seach");
  127. _searchfield.backgroundColor = [UIColor whiteColor];
  128. _searchfield.textColor = [UIColor blackColor];
  129. [_searchfield setFont:SYSFONT(14)];
  130. // _seekTextField.backgroundColor = [UIColor whiteColor];
  131. UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"card_search"]];
  132. UIView *leftView = [[UIView alloc ]initWithFrame:CGRectMake(0, 0, 30, 30)];
  133. // imageView.center = CGPointMake(leftView.frame.size.width/2, leftView.frame.size.height/2);
  134. imageView.center = leftView.center;
  135. [leftView addSubview:imageView];
  136. _searchfield.leftView = leftView;
  137. _searchfield.clearButtonMode = UITextFieldViewModeWhileEditing;
  138. _searchfield.leftViewMode = UITextFieldViewModeAlways;
  139. _searchfield.borderStyle = UITextBorderStyleNone;
  140. _searchfield.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter;
  141. _searchfield.layer.masksToBounds = YES;
  142. _searchfield.layer.cornerRadius = 5;
  143. _searchfield.delegate = self;
  144. _searchfield.returnKeyType = UIReturnKeyGoogle;
  145. [backView addSubview:_searchfield];
  146. self.tableView.tableHeaderView = backView;
  147. _currentGroupArray = [NSMutableArray array];
  148. #pragma 隐藏群搜索功能
  149. if (![g_config.isOpenRoomSearch boolValue]) {
  150. NSString *img = THESIMPLESTYLE ? @"search_publicNumber_black" : @"search_publicNumber";
  151. btn = [UIFactory createButtonWithImage:img
  152. highlight:nil
  153. target:self
  154. selector:@selector(onSearchRoom)];
  155. btn.frame = CGRectMake(JX_SCREEN_WIDTH - 18*2-15*2-10, JX_SCREEN_TOP - 18-15, 18, 18);
  156. [self.tableHeader addSubview:btn];
  157. }
  158. _myGroupArray = [[NSMutableArray alloc] init];
  159. _allGroupArray = [[NSMutableArray alloc] init];
  160. _page=0;
  161. _isLoading=0;
  162. _selMenu = 0;
  163. [self getServerData];
  164. [g_notify addObserver:self selector:@selector(onReceiveRoomRemind:) name:kXMPPRoomNotifaction object:nil];
  165. [g_notify addObserver:self selector:@selector(onQuitRoom:) name:kQuitRoomNotifaction object:nil];
  166. [g_notify addObserver:self selector:@selector(doRefresh:) name:kUpdateUserNotifaction object:nil];
  167. [g_notify addObserver:self selector:@selector(headImageNotification:) name:kGroupHeadImageModifyNotifaction object:nil];
  168. }
  169. return self;
  170. }
  171. -(void)headImageNotification:(NSNotification *)notification{
  172. [_table reloadData];
  173. }
  174. //-(void)onClick:(UIButton*)sender{
  175. //}
  176. - (void)doRefresh:(NSNotification *)notif {
  177. [_myGroupArray removeAllObjects];
  178. [_currentGroupArray removeAllObjects];
  179. _searchfield.text = @"";
  180. [self getServerData];
  181. }
  182. - (void) customView {
  183. //顶部筛选控件
  184. // _topSiftView = [[JXTopSiftJobView alloc] initWithFrame:CGRectMake(0, JX_SCREEN_TOP, JX_SCREEN_WIDTH, 40)];
  185. // _topSiftView.delegate = self;
  186. // _topSiftView.isShowMoreParaBtn = NO;
  187. // _topSiftView.dataArray = [[NSArray alloc] initWithObjects:Localized(@"JXGroupVC_MyRoom"),Localized(@"JXGroupVC_AllRoom"), nil];
  188. // // _topSiftView.searchForType = SearchForPos;
  189. // [self.view addSubview:_topSiftView];
  190. }
  191. - (void)viewDidLoad
  192. {
  193. [super viewDidLoad];
  194. self.navigationItem.rightBarButtonItem=[UIBarButtonItem xmg_itemWithAplpImage:@"im_003_more_button_black" target:self action:@selector(addClick)];
  195. }
  196. - (void)addClick{
  197. JXSelectFriendsVC *vc = [JXSelectFriendsVC alloc];
  198. vc.isPlusButtonComming = YES;
  199. vc = [vc init];
  200. // [g_navigation pushViewController:vc animated:YES];
  201. // JXNewRoomVC* vc1 = [[JXNewRoomVC alloc]init];
  202. [g_navigation pushViewController:vc animated:YES];
  203. }
  204. - (void)doSearch{}
  205. - (void)dealloc {
  206. [g_notify removeObserver:self];
  207. [g_notify removeObserver:self name:kXMPPRoomNotifaction object:nil];
  208. [g_notify removeObserver:self name:kQuitRoomNotifaction object:nil];
  209. [g_notify removeObserver:self name:kUpdateUserNotifaction object:nil];
  210. [g_notify removeObserver:self name:kGroupHeadImageModifyNotifaction object:nil];
  211. }
  212. -(void)viewWillAppear:(BOOL)animated{
  213. [super viewWillAppear:animated];
  214. [self.navigationController setNavigationBarHidden:YES];
  215. if (_selMenu == 1) {
  216. [_scrollView setContentOffset:CGPointMake(JX_SCREEN_WIDTH/2+Scroll_Move*0.5, 0) animated:NO];
  217. }else{
  218. [_scrollView setContentOffset:CGPointMake(JX_SCREEN_WIDTH, 0) animated:NO];
  219. }
  220. }
  221. - (void)viewDidUnload
  222. {
  223. [super viewDidUnload];
  224. }
  225. -(void)onNewRoom{
  226. if ([g_config.isCommonCreateGroup intValue] == 1) {
  227. [g_App showAlert:Localized(@"JX_NotCreateNewRoom")];
  228. return;
  229. }
  230. // JXNewRoomVC* vc = [[JXNewRoomVC alloc]init];
  231. // [g_navigation pushViewController:vc animated:YES];
  232. JXSelectFriendsVC *vc = [JXSelectFriendsVC alloc];
  233. vc.isPlusButtonComming = YES;
  234. vc = [vc init];
  235. [g_navigation pushViewController:vc animated:YES];
  236. }
  237. /**
  238. * 跳转到 搜索页面
  239. */
  240. - (void)textFieldDidBeginEditing:(UITextField *)textField{
  241. return;
  242. [textField resignFirstResponder];
  243. JXCommonInputVC *vc = [[JXCommonInputVC alloc] init];
  244. vc.delegate = self;
  245. vc.titleStr = Localized(@"JX_CommonGroupSearch");
  246. vc.subTitle = Localized(@"JX_ManyPerChat");
  247. vc.tip = Localized(@"JX_InputRoomName");
  248. vc.btnTitle = Localized(@"JX_Seach");
  249. [g_navigation pushViewController:vc animated:YES];
  250. }
  251. - (void)textFieldDidEndEditing:(UITextField *)textField{
  252. [textField resignFirstResponder];
  253. }
  254. - (void)onSearchRoom {
  255. return;
  256. JXCommonInputVC *vc = [[JXCommonInputVC alloc] init];
  257. vc.delegate = self;
  258. vc.titleStr = Localized(@"JX_CommonGroupSearch");
  259. vc.subTitle = Localized(@"JX_ManyPerChat");
  260. vc.tip = Localized(@"JX_InputRoomName");
  261. vc.btnTitle = Localized(@"JX_Seach");
  262. [g_navigation pushViewController:vc animated:YES];
  263. }
  264. - (void)commonInputVCBtnActionWithVC:(JXCommonInputVC *)commonInputVC {
  265. JXSearchGroupVC *vc = [[JXSearchGroupVC alloc] init];
  266. vc.searchName = commonInputVC.name.text;
  267. [g_navigation pushViewController:vc animated:YES];
  268. }
  269. #pragma mark ---------tableView协议----------------
  270. -(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
  271. {
  272. return 1;
  273. }
  274. -(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
  275. {
  276. if (_selMenu == 0) {
  277. return _currentGroupArray.count;
  278. }else if (_selMenu == 1) {
  279. return _allGroupArray.count;
  280. }
  281. return 0;
  282. }
  283. - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
  284. {
  285. NSString* cellName = [NSString stringWithFormat:@"groupJXCell"];
  286. JXCell * cell = [tableView dequeueReusableCellWithIdentifier:cellName];
  287. JXUserObject *user;
  288. if (_selMenu == 0) {
  289. user = _currentGroupArray[indexPath.row];
  290. }else if (_selMenu == 1) {
  291. user = _allGroupArray[indexPath.row];
  292. }
  293. if(cell==nil){
  294. cell = [[JXCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellName];
  295. [_table addToPool:cell];
  296. }
  297. cell.delegate = self;
  298. cell.didTouch = @selector(onHeadImage:);
  299. // [cell groupCellDataSet:dict indexPath:indexPath];
  300. // NSTimeInterval t = [[dataDict objectForKey:@"createTime"] longLongValue];
  301. // NSDate* d = [NSDate dateWithTimeIntervalSince1970:t];
  302. cell.index = (int)indexPath.row;
  303. // if (_selMenu == 0) {
  304. // cell.title = dataDict[@"name"];
  305. // }else
  306. cell.title = [NSString stringWithFormat:@"%@",user.userNickname];
  307. // }
  308. cell.subtitle =@"";// user.content;
  309. cell.bottomTitle =@"";// [TimeUtil formatDate:user.timeCreate format:@"MM-dd HH:mm"];
  310. cell.userId = user.createUserId;
  311. cell.headImageView.tag = (int)indexPath.row;
  312. cell.headImageView.delegate = self;
  313. cell.headImageView.didTouch = @selector(onHeadImage:);
  314. [cell.lbTitle setText:cell.title];
  315. cell.lbTitle.tag = cell.index;
  316. [cell.lbSubTitle setText:cell.subtitle];
  317. [cell.timeLabel setText:cell.bottomTitle];
  318. cell.bageNumber.delegate = self;
  319. // bageNumber.didDragout = self.didDragout;
  320. cell.bage = cell.bage;
  321. NSString * roomIdStr = user.roomId;
  322. cell.roomId = roomIdStr;
  323. [cell headImageViewImageWithUserId:user.userId roomId:roomIdStr];
  324. cell.isSmall = NO;
  325. [self doAutoScroll:indexPath];
  326. return cell;
  327. }
  328. -(void)onHeadImage:(JXImageView*)sender{
  329. JXUserObject *user;
  330. if (_selMenu == 0) {
  331. user = _currentGroupArray[sender.tag];
  332. }else if (_selMenu == 1) {
  333. user = _allGroupArray[sender.tag];
  334. }
  335. JXRoomMemberVC* vc = [JXRoomMemberVC alloc];
  336. vc.roomId = user.roomId;
  337. vc = [vc init];
  338. [g_navigation pushViewController:vc animated:YES];
  339. // [g_server getRoom:dict[@"id"] toView:self];
  340. // [g_server getUser:[[dict objectForKey:@"userId"] stringValue] toView:self];
  341. // dict = nil;
  342. }
  343. -(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
  344. {
  345. [super tableView:tableView didSelectRowAtIndexPath:indexPath];
  346. if(g_xmpp.isLogined != 1){
  347. // 掉线后点击title重连
  348. // 判断XMPP是否在线 不在线重连
  349. [g_xmpp showXmppOfflineAlert];
  350. return;
  351. }
  352. [_inputText resignFirstResponder];
  353. _sel = (int)indexPath.row;
  354. JXUserObject *dict;
  355. if (_selMenu == 0) {
  356. dict = _currentGroupArray[_sel];
  357. }else if (_selMenu == 1) {
  358. dict = _allGroupArray[_sel];
  359. }
  360. JXUserObject *user = [[JXUserObject sharedInstance] getUserById:dict.userId];
  361. if(user && [user.groupStatus intValue] == 0){
  362. _chatRoom = [[JXXMPP sharedInstance].roomPool joinRoom:dict.userId title:dict.userNickname lastDate:nil isNew:YES];
  363. //老房间:
  364. [self showChatView];
  365. }else{
  366. _chatRoom = [[JXXMPP sharedInstance].roomPool joinRoom:dict.userId title:dict.userNickname lastDate:nil isNew:YES];
  367. BOOL isNeedVerify = [dict.isNeedVerify boolValue];
  368. long long userId = [dict.createUserId longLongValue];
  369. if (isNeedVerify && userId != [g_myself.userId longLongValue]) {
  370. self.roomJid = dict.userId;
  371. self.roomUserName = dict.userNickname;
  372. self.roomUserId = dict.createUserId;
  373. JXInputVC* vc = [JXInputVC alloc];
  374. vc.delegate = self;
  375. vc.didTouch = @selector(onInputHello:);
  376. vc.inputTitle = Localized(@"JX_GroupOwnersHaveEnabled");
  377. vc.titleColor = [UIColor lightGrayColor];
  378. vc.titleFont = [UIFont systemFontOfSize:13.0];
  379. vc.inputHint = Localized(@"JX_PleaseEnterTheReason");
  380. vc = [vc init];
  381. [g_window addSubview:vc.view];
  382. }else {
  383. [_wait start:Localized(@"JXAlert_AddRoomIng") delay:30];
  384. //新房间:
  385. _chatRoom.delegate = self;
  386. [_chatRoom joinRoom:YES];
  387. }
  388. }
  389. dict = nil;
  390. UITableViewCell * cell = [tableView cellForRowAtIndexPath:indexPath];
  391. cell.selected = NO;
  392. }
  393. -(void)onInputHello:(JXInputVC*)sender{
  394. JXMessageObject *msg = [[JXMessageObject alloc] init];
  395. msg.fromUserId = MY_USER_ID;
  396. msg.toUserId = [NSString stringWithFormat:@"%@", self.roomUserId];
  397. msg.fromUserName = MY_USER_NAME;
  398. msg.toUserName = self.roomUserName;
  399. msg.timeSend = [NSDate date];
  400. msg.type = [NSNumber numberWithInt:kRoomRemind_NeedVerify];
  401. NSString *userIds = g_myself.userId;
  402. NSString *userNames = g_myself.userNickname;
  403. NSDictionary *dict = @{
  404. @"userIds" : userIds,
  405. @"userNames" : userNames,
  406. @"roomJid" : self.roomJid,
  407. @"reason" : sender.inputText,
  408. @"isInvite" : [NSNumber numberWithBool:YES]
  409. };
  410. NSError *error = nil;
  411. NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dict options:NSJSONWritingPrettyPrinted error:&error];
  412. NSString *jsonStr = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
  413. msg.objectId = jsonStr;
  414. [g_xmpp sendMessage:msg roomName:nil];
  415. // msg.fromUserId = self.roomJid;
  416. // msg.type = [NSNumber numberWithInt:kWCMessageTypeRemind];
  417. // msg.content = @"申请已发送给群主,请等待群主确认";
  418. // [msg insert:self.roomJid];
  419. // if ([self.delegate respondsToSelector:@selector(needVerify:)]) {
  420. // [self.delegate needVerify:msg];
  421. // }
  422. }
  423. -(void)xmppRoomDidJoin{
  424. JXUserObject *user;
  425. if (_selMenu == 0) {
  426. user = _currentGroupArray[_sel];
  427. }else if (_selMenu == 1) {
  428. user = _allGroupArray[_sel];
  429. }
  430. // JXUserObject* user = [[JXUserObject alloc]init];
  431. // user.userNickname = [dict objectForKey:@"name"];
  432. // user.userId = [dict objectForKey:@"jid"];
  433. // user.userDescription = [dict objectForKey:@"desc"];
  434. // user.roomId = [dict objectForKey:@"id"];
  435. // user.showRead = [dict objectForKey:@"showRead"];
  436. // user.showMember = [dict objectForKey:@"showMember"];
  437. // user.allowSendCard = [dict objectForKey:@"allowSendCard"];
  438. // user.chatRecordTimeOut = [dict objectForKey:@"chatRecordTimeOut"];
  439. // user.talkTime = [dict objectForKey:@"talkTime"];
  440. // user.allowInviteFriend = [dict objectForKey:@"allowInviteFriend"];
  441. // user.allowUploadFile = [dict objectForKey:@"allowUploadFile"];
  442. // user.allowConference = [dict objectForKey:@"allowConference"];
  443. // user.allowSpeakCourse = [dict objectForKey:@"allowSpeakCourse"];
  444. // user.isNeedVerify = [dict objectForKey:@"isNeedVerify"];
  445. if (![user haveTheUser])
  446. [user insertRoom];
  447. // else
  448. // [user update];
  449. // [user release];
  450. [g_server addRoomMember:user.roomId userId:g_myself.userId nickName:g_myself.userNickname toView:self];
  451. // dict = nil;
  452. _chatRoom.delegate = nil;
  453. [self showChatView];
  454. }
  455. -(void)startReconnect{
  456. NSArray * tempArray;
  457. if (_selMenu == 0) {
  458. tempArray = _currentGroupArray;
  459. }else if (_selMenu == 1) {
  460. tempArray = _allGroupArray;
  461. }
  462. for (int i = 0; i < [tempArray count]; i++) {
  463. JXUserObject *user=tempArray[i];
  464. // JXUserObject* user = [[JXUserObject alloc]init];
  465. // user.userNickname = [dict objectForKey:@"name"];
  466. // user.userId = [dict objectForKey:@"jid"];
  467. // user.userDescription = [dict objectForKey:@"desc"];
  468. // user.roomId = [dict objectForKey:@"id"];
  469. // user.showRead = [dict objectForKey:@"showRead"];
  470. // user.showMember = [dict objectForKey:@"showMember"];
  471. // user.allowSendCard = [dict objectForKey:@"allowSendCard"];
  472. // user.chatRecordTimeOut = [dict objectForKey:@"chatRecordTimeOut"];
  473. // user.talkTime = [dict objectForKey:@"talkTime"];
  474. // user.allowInviteFriend = [dict objectForKey:@"allowInviteFriend"];
  475. // user.allowUploadFile = [dict objectForKey:@"allowUploadFile"];
  476. // user.allowConference = [dict objectForKey:@"allowConference"];
  477. // user.allowSpeakCourse = [dict objectForKey:@"allowSpeakCourse"];
  478. // user.isNeedVerify = [dict objectForKey:@"isNeedVerify"];
  479. if (![user haveTheUser])
  480. [user insertRoom];
  481. else
  482. [user update];
  483. // [user release];
  484. [g_server addRoomMember:user.roomId userId:g_myself.userId nickName:g_myself.userNickname toView:self];
  485. // dict = nil;
  486. _chatRoom.delegate = nil;
  487. }
  488. }
  489. -(void)showChatView{
  490. // [_wait stop];
  491. JXUserObject *user;
  492. if (_selMenu == 0) {
  493. user = _currentGroupArray[_sel];
  494. }else if (_selMenu == 1) {
  495. user = _allGroupArray[_sel];
  496. }
  497. roomData * roomdata = [[roomData alloc] init];
  498. [roomdata getDataFromDict:[user toDictionary]];
  499. // JXChatViewController JXChatViewC
  500. JXChatViewC *sendView=[JXChatViewC alloc];
  501. sendView.title = user.userNickname;
  502. sendView.roomJid = user.userId;
  503. sendView.roomId = user.roomId;
  504. sendView.chatRoom = _chatRoom;
  505. sendView.room = roomdata;
  506. // JXUserObject * userObj = [[JXUserObject alloc]init];
  507. // userObj.userId = [dict objectForKey:@"jid"];
  508. // userObj.showRead = [dict objectForKey:@"showRead"];
  509. // userObj.showMember = [dict objectForKey:@"showMember"];
  510. // userObj.allowSendCard = [dict objectForKey:@"allowSendCard"];
  511. // userObj.userNickname = [dict objectForKey:@"name"];
  512. // userObj.chatRecordTimeOut = roomdata.chatRecordTimeOut;
  513. // userObj.talkTime = [dict objectForKey:@"talkTime"];
  514. // userObj.allowInviteFriend = [dict objectForKey:@"allowInviteFriend"];
  515. // userObj.allowUploadFile = [dict objectForKey:@"allowUploadFile"];
  516. // userObj.allowConference = [dict objectForKey:@"allowConference"];
  517. // userObj.allowSpeakCourse = [dict objectForKey:@"allowSpeakCourse"];
  518. // userObj.isNeedVerify= [dict objectForKey:@"isNeedVerify"];
  519. sendView.chatPerson = user;
  520. sendView = [sendView init];
  521. // [g_App.window addSubview:sendView.view];
  522. [g_navigation pushViewController:sendView animated:YES];
  523. // dict = nil;
  524. }
  525. -(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
  526. {
  527. return 68;
  528. }
  529. -(void)buildButtons{
  530. //int height=60;
  531. int height1=26;
  532. // int height=0;
  533. _inputText = [[UITextField alloc]initWithFrame:CGRectMake(5, JX_SCREEN_TOP+2, 310, height1)];
  534. _inputText.textColor = [UIColor blackColor];
  535. _inputText.userInteractionEnabled = YES;
  536. _inputText.delegate = self;
  537. _inputText.placeholder = Localized(@"JXGroupVC_InputRoomName");
  538. _inputText.borderStyle = UITextBorderStyleRoundedRect;
  539. _inputText.font = g_factory.font15;
  540. _inputText.text = Localized(@"JXGroupVC_Sky");
  541. _inputText.autocorrectionType = UITextAutocorrectionTypeNo;
  542. _inputText.returnKeyType = UIReturnKeyDone;
  543. _inputText.clearButtonMode = UITextFieldViewModeWhileEditing;
  544. _table.tableHeaderView = _inputText;
  545. }
  546. - (BOOL)textFieldShouldReturn:(UITextField *)textField{
  547. [textField resignFirstResponder];
  548. return YES;
  549. }
  550. - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{
  551. NSString *searchString = [_searchfield.text stringByReplacingCharactersInRange:range withString:string];
  552. if (searchString.length == 0) {
  553. self.isShowHeaderPull = YES;
  554. [self getServerData];
  555. }else{
  556. self.isShowHeaderPull = NO;
  557. for (NSInteger i = 0; i < _myGroupArray.count ; i++) {
  558. JXUserObject *user = _myGroupArray[i];
  559. NSString *str = user.userNickname;
  560. if ([str localizedCaseInsensitiveContainsString:searchString]) {
  561. if (![_currentGroupArray containsObject:user]) {
  562. [_currentGroupArray addObject:user];
  563. }
  564. }else{
  565. if ([_currentGroupArray containsObject:user]) {
  566. [_currentGroupArray removeObject:user];
  567. }
  568. }
  569. }
  570. }
  571. [self.tableView reloadData];
  572. return YES;
  573. }
  574. -(void) didServerResultSucces:(JXConnection*)aDownload dict:(NSDictionary*)dict array:(NSArray*)array1{
  575. [_wait hide];
  576. [self stopLoading];
  577. if([aDownload.action isEqualToString:act_roomList] || [aDownload.action isEqualToString:act_roomListHis] ){
  578. self.isShowFooterPull = [array1 count]>=jx_page_size;
  579. NSMutableArray * tempArray=[NSMutableArray arrayWithCapacity:0];
  580. if (_selMenu == 0) {
  581. tempArray = _myGroupArray;
  582. }else if (_selMenu == 1) {
  583. tempArray = _allGroupArray;
  584. }
  585. if (_page == 0) {
  586. [tempArray removeAllObjects];
  587. }
  588. for (int i = 0; i < [array1 count]; i++) {
  589. NSDictionary *dict=array1[i];
  590. JXUserObject* user = [[JXUserObject alloc]init];
  591. user.userNickname = [dict objectForKey:@"name"];
  592. user.userId = [dict objectForKey:@"jid"];
  593. user.userDescription = [dict objectForKey:@"desc"];
  594. user.roomId = [dict objectForKey:@"id"];
  595. user.showRead = [dict objectForKey:@"showRead"];
  596. user.showMember = [dict objectForKey:@"showMember"];
  597. user.allowSendCard = [dict objectForKey:@"allowSendCard"];
  598. user.chatRecordTimeOut = [NSString stringWithFormat:@"%@", [dict objectForKey:@"chatRecordTimeOut"]];
  599. user.offlineNoPushMsg = [(NSDictionary *)[dict objectForKey:@"member"] objectForKey:@"offlineNoPushMsg"];
  600. user.talkTime = [dict objectForKey:@"talkTime"];
  601. user.allowInviteFriend = [dict objectForKey:@"allowInviteFriend"];
  602. user.allowUploadFile = [dict objectForKey:@"allowUploadFile"];
  603. user.allowConference = [dict objectForKey:@"allowConference"];
  604. user.allowSpeakCourse = [dict objectForKey:@"allowSpeakCourse"];
  605. user.category = [dict objectForKey:@"category"];
  606. user.createUserId = [dict objectForKey:@"userId"];
  607. user.timeCreate = [NSDate dateWithTimeIntervalSince1970:[[dict objectForKey:@"createTime"] longLongValue]];
  608. user.isNeedVerify = [dict objectForKey:@"isNeedVerify"];
  609. if([[dict allKeys] containsObject:@"groupType"])
  610. {
  611. NSDictionary *dictby=[dict objectForKey:@"groupType"];
  612. user.groupType = [dictby objectForKey:@"typeName"];
  613. }else{
  614. user.groupType = @"";
  615. }
  616. NSDictionary *member = [dict objectForKey:@"member"];
  617. #ifdef IS_MsgEncrypt
  618. if ([member objectForKey:@"chatKeyGroup"]) {
  619. user.chatKeyGroup = [g_msgUtil encryptRoomMsgKey:user.roomId randomKey:[member objectForKey:@"chatKeyGroup"]];
  620. }
  621. #endif
  622. if ([aDownload.action isEqualToString:act_roomListHis]) {
  623. if (![user haveTheUser]){
  624. [user insertRoom];
  625. }else {
  626. [user updateUserNickname];
  627. [user updateGroupType];
  628. }
  629. }
  630. [tempArray addObject:user];
  631. }
  632. _currentGroupArray = tempArray;
  633. _refreshCount++;
  634. [_table reloadData];
  635. return;
  636. if (_selMenu == 0) {
  637. if (array1.count > 0) {
  638. [self getServerData];
  639. }
  640. }else {
  641. [_currentGroupArray removeAllObjects];
  642. _currentGroupArray = [[NSMutableArray alloc]initWithArray:_myGroupArray] ;
  643. _refreshCount++;
  644. [_table reloadData];
  645. }
  646. // if(_page == 0){
  647. // [tempArray removeAllObjects];
  648. // [tempArray addObjectsFromArray:array1];
  649. // //保存所有进入过的房间
  650. // if ([aDownload.action isEqualToString:act_roomListHis]) {
  651. // for (int i = 0; i < [tempArray count]; i++) {
  652. // NSDictionary *dict=tempArray[i];
  653. //
  654. // JXUserObject* user = [[JXUserObject alloc]init];
  655. // user.userNickname = [dict objectForKey:@"name"];
  656. // user.userId = [dict objectForKey:@"jid"];
  657. // user.userDescription = [dict objectForKey:@"desc"];
  658. // user.roomId = [dict objectForKey:@"id"];
  659. // user.showRead = [dict objectForKey:@"showRead"];
  660. // user.showMember = [dict objectForKey:@"showMember"];
  661. // user.allowSendCard = [dict objectForKey:@"allowSendCard"];
  662. // user.chatRecordTimeOut = [NSString stringWithFormat:@"%@", [dict objectForKey:@"chatRecordTimeOut"]];
  663. // user.offlineNoPushMsg = [[dict objectForKey:@"member"] objectForKey:@"offlineNoPushMsg"];
  664. // user.talkTime = [dict objectForKey:@"talkTime"];
  665. // user.allowInviteFriend = [dict objectForKey:@"allowInviteFriend"];
  666. // user.allowUploadFile = [dict objectForKey:@"allowUploadFile"];
  667. // user.allowConference = [dict objectForKey:@"allowConference"];
  668. // user.allowSpeakCourse = [dict objectForKey:@"allowSpeakCourse"];
  669. // user.category = [dict objectForKey:@"category"];
  670. // user.createUserId = [dict objectForKey:@"userId"];
  671. //
  672. // if (![user haveTheUser]){
  673. // [user insertRoom];
  674. // }else {
  675. // [user updateUserNickname];
  676. // }
  677. //
  678. // }
  679. // }
  680. //
  681. // }else{
  682. // if([array1 count]>0)
  683. // [tempArray addObjectsFromArray:array1];
  684. // }
  685. }
  686. if( [aDownload.action isEqualToString:act_UserGet] ){
  687. JXUserObject* user = [[JXUserObject alloc]init];
  688. [user getDataFromDict:dict];
  689. JXUserInfoVC* vc = [JXUserInfoVC alloc];
  690. vc.user = user;
  691. vc.fromAddType = 6;
  692. vc = [vc init];
  693. // [g_window addSubview:vc.view];
  694. [g_navigation pushViewController:vc animated:YES];
  695. // [user release];
  696. }
  697. if( [aDownload.action isEqualToString:act_roomGet] ){
  698. JXUserObject* user = [[JXUserObject alloc]init];
  699. [user getDataFromDict:dict];
  700. NSDictionary * groupDict = [user toDictionary];
  701. roomData * roomdata = [[roomData alloc] init];
  702. [roomdata getDataFromDict:groupDict];
  703. [roomdata getDataFromDict:dict];
  704. // 非本群成员,不能进入
  705. BOOL flag = NO;
  706. for (NSInteger i = 0; i < roomdata.members.count; i ++) {
  707. memberData *data = roomdata.members[i];
  708. if (data.userId == [g_myself.userId longLongValue]) {
  709. flag = YES;
  710. break;
  711. }
  712. }
  713. if (!flag) {
  714. [g_App showAlert:Localized(@"JX_NotEnterRoom")];
  715. return;
  716. }
  717. JXRoomMemberVC* vc = [JXRoomMemberVC alloc];
  718. vc.chatRoom = [[JXXMPP sharedInstance].roomPool joinRoom:roomdata.roomJid title:roomdata.name lastDate:nil isNew:NO];
  719. vc.room = roomdata;
  720. vc = [vc init];
  721. // [g_window addSubview:vc.view];
  722. [g_navigation pushViewController:vc animated:YES];
  723. }
  724. if( [aDownload.action isEqualToString:act_roomMemberSet] ){
  725. }
  726. }
  727. -(int) didServerResultFailed:(JXConnection*)aDownload dict:(NSDictionary*)dict{
  728. [_wait hide];
  729. return show_error;
  730. }
  731. -(int) didServerConnectError:(JXConnection*)aDownload error:(NSError *)error{//error为空时,代表超时
  732. [_wait hide];
  733. return show_error;
  734. }
  735. -(void) didServerConnectStart:(JXConnection*)aDownload{
  736. /// [_wait start];
  737. }
  738. //筛选点击
  739. - (void)topItemBtnClick:(UIButton *)btn{
  740. [self checkAfterScroll:(btn.tag-100)];
  741. [_topSiftView resetAllParaBtn];
  742. }
  743. - (void)checkAfterScroll:(CGFloat)offsetX{
  744. if (offsetX == 0) {
  745. _selMenu = 0;
  746. if (_myGroupArray.count <= 0) {
  747. [self scrollToPageUp];
  748. }else {
  749. [self.tableView reloadData];
  750. }
  751. }else {
  752. _selMenu = 1;
  753. if (_allGroupArray.count <= 0) {
  754. [self scrollToPageUp];
  755. }else {
  756. [self.tableView reloadData];
  757. }
  758. }
  759. }
  760. -(void)scrollToPageUp{
  761. if(_isLoading)
  762. return;
  763. _page = 0;
  764. [self performSelector:@selector(stopLoading) withObject:nil afterDelay:1.0];
  765. if(_selMenu==1){
  766. [g_server listRoom:_page roomName:nil toView:self];
  767. }
  768. else{
  769. [g_server listHisRoom:_page pageSize:1000 toView:self];
  770. _searchfield.text = @"";
  771. }
  772. }
  773. #pragma mark ------ 加载所以群
  774. -(void)getServerData{
  775. self.isShowFooterPull = _selMenu == 1;
  776. if(_selMenu==1){
  777. [g_server listRoom:_page roomName:nil toView:self];
  778. self.isShowFooterPull = YES;
  779. }
  780. else{
  781. [g_server listHisRoom:_page pageSize:1000 toView:self];
  782. _searchfield.text = @"";
  783. [self.tableView reloadData];
  784. self.isShowFooterPull = NO;
  785. return;
  786. _myGroupArray = [[JXUserObject sharedInstance] fetchAllRoomsFromLocal];
  787. [_currentGroupArray removeAllObjects];
  788. _currentGroupArray = [[NSMutableArray alloc]initWithArray:_myGroupArray] ;
  789. dispatch_async(dispatch_get_main_queue(), ^{
  790. self.footeView.text=[NSString stringWithFormat:@"%zd个群聊",_currentGroupArray.count];
  791. });
  792. // [g_notify postNotificationName:kOfflineOperationUpdateUserSet object:nil];
  793. if (_myGroupArray.count <= 0) {
  794. [self scrollToPageUp];
  795. }else {
  796. [self.tableView reloadData];
  797. }
  798. }
  799. }
  800. -(void)onReceiveRoomRemind:(NSNotification *)notifacation//更改名称
  801. {
  802. NSMutableArray * tempArray;
  803. if (_selMenu == 0) {
  804. tempArray = _myGroupArray;
  805. }else if (_selMenu == 1) {
  806. tempArray = _allGroupArray;
  807. }
  808. JXRoomRemind* p = (JXRoomRemind *)notifacation.object;
  809. if([p.type intValue] == kRoomRemind_RoomName){
  810. for(int i=0;i<[tempArray count];i++){
  811. JXUserObject *user=tempArray[i];
  812. if([p.objectId isEqualToString:user.userId]){
  813. user.userNickname = p.content;
  814. // [dict setValue:p.content forKey:@"name"];
  815. NSIndexPath* row = [NSIndexPath indexPathForRow:i inSection:0];
  816. JXCell* cell = (JXCell*)[_table cellForRowAtIndexPath:row];
  817. cell.title = user.userNickname;
  818. cell = nil;
  819. break;
  820. }
  821. // dict = nil;
  822. }
  823. // self.title = p.content;
  824. }
  825. if([p.type intValue] == kRoomRemind_DelMember || [p.type intValue] == kRoomRemind_DelRoom){
  826. for(int i=0;i<[tempArray count];i++){
  827. JXUserObject *user=tempArray[i];
  828. if([p.objectId isEqualToString:user.userId] && [p.toUserId isEqualToString:MY_USER_ID]){
  829. [tempArray removeObjectAtIndex:i];
  830. _refreshCount++;
  831. [_table reloadData];
  832. break;
  833. }
  834. // dict = nil;
  835. }
  836. }
  837. }
  838. -(void)onQuitRoom:(NSNotification *)notifacation//删除房间
  839. {
  840. NSMutableArray * tempArray;
  841. if (_selMenu == 0) {
  842. tempArray = _myGroupArray;
  843. }else if (_selMenu == 1) {
  844. tempArray = _allGroupArray;
  845. }
  846. JXRoomObject* p = (JXRoomObject *)notifacation.object;
  847. for(int i=0;i<[tempArray count];i++){
  848. JXUserObject *user=tempArray[i];
  849. if([p.roomJid isEqualToString:user.userId]){
  850. [tempArray removeObjectAtIndex:i];
  851. _refreshCount++;
  852. [_table reloadData];
  853. break;
  854. }
  855. // dict = nil;
  856. }
  857. p = nil;
  858. }
  859. @end