JXGroupViewController.m 36 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001
  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. if (_selMenu == 0) {
  633. if (array1.count > 0) {
  634. [self getServerData];
  635. }
  636. }else {
  637. [_currentGroupArray removeAllObjects];
  638. _currentGroupArray = [[NSMutableArray alloc]initWithArray:_myGroupArray] ;
  639. _refreshCount++;
  640. [_table reloadData];
  641. }
  642. // if(_page == 0){
  643. // [tempArray removeAllObjects];
  644. // [tempArray addObjectsFromArray:array1];
  645. // //保存所有进入过的房间
  646. // if ([aDownload.action isEqualToString:act_roomListHis]) {
  647. // for (int i = 0; i < [tempArray count]; i++) {
  648. // NSDictionary *dict=tempArray[i];
  649. //
  650. // JXUserObject* user = [[JXUserObject alloc]init];
  651. // user.userNickname = [dict objectForKey:@"name"];
  652. // user.userId = [dict objectForKey:@"jid"];
  653. // user.userDescription = [dict objectForKey:@"desc"];
  654. // user.roomId = [dict objectForKey:@"id"];
  655. // user.showRead = [dict objectForKey:@"showRead"];
  656. // user.showMember = [dict objectForKey:@"showMember"];
  657. // user.allowSendCard = [dict objectForKey:@"allowSendCard"];
  658. // user.chatRecordTimeOut = [NSString stringWithFormat:@"%@", [dict objectForKey:@"chatRecordTimeOut"]];
  659. // user.offlineNoPushMsg = [[dict objectForKey:@"member"] objectForKey:@"offlineNoPushMsg"];
  660. // user.talkTime = [dict objectForKey:@"talkTime"];
  661. // user.allowInviteFriend = [dict objectForKey:@"allowInviteFriend"];
  662. // user.allowUploadFile = [dict objectForKey:@"allowUploadFile"];
  663. // user.allowConference = [dict objectForKey:@"allowConference"];
  664. // user.allowSpeakCourse = [dict objectForKey:@"allowSpeakCourse"];
  665. // user.category = [dict objectForKey:@"category"];
  666. // user.createUserId = [dict objectForKey:@"userId"];
  667. //
  668. // if (![user haveTheUser]){
  669. // [user insertRoom];
  670. // }else {
  671. // [user updateUserNickname];
  672. // }
  673. //
  674. // }
  675. // }
  676. //
  677. // }else{
  678. // if([array1 count]>0)
  679. // [tempArray addObjectsFromArray:array1];
  680. // }
  681. }
  682. if( [aDownload.action isEqualToString:act_UserGet] ){
  683. JXUserObject* user = [[JXUserObject alloc]init];
  684. [user getDataFromDict:dict];
  685. JXUserInfoVC* vc = [JXUserInfoVC alloc];
  686. vc.user = user;
  687. vc.fromAddType = 6;
  688. vc = [vc init];
  689. // [g_window addSubview:vc.view];
  690. [g_navigation pushViewController:vc animated:YES];
  691. // [user release];
  692. }
  693. if( [aDownload.action isEqualToString:act_roomGet] ){
  694. JXUserObject* user = [[JXUserObject alloc]init];
  695. [user getDataFromDict:dict];
  696. NSDictionary * groupDict = [user toDictionary];
  697. roomData * roomdata = [[roomData alloc] init];
  698. [roomdata getDataFromDict:groupDict];
  699. [roomdata getDataFromDict:dict];
  700. // 非本群成员,不能进入
  701. BOOL flag = NO;
  702. for (NSInteger i = 0; i < roomdata.members.count; i ++) {
  703. memberData *data = roomdata.members[i];
  704. if (data.userId == [g_myself.userId longLongValue]) {
  705. flag = YES;
  706. break;
  707. }
  708. }
  709. if (!flag) {
  710. [g_App showAlert:Localized(@"JX_NotEnterRoom")];
  711. return;
  712. }
  713. JXRoomMemberVC* vc = [JXRoomMemberVC alloc];
  714. vc.chatRoom = [[JXXMPP sharedInstance].roomPool joinRoom:roomdata.roomJid title:roomdata.name lastDate:nil isNew:NO];
  715. vc.room = roomdata;
  716. vc = [vc init];
  717. // [g_window addSubview:vc.view];
  718. [g_navigation pushViewController:vc animated:YES];
  719. }
  720. if( [aDownload.action isEqualToString:act_roomMemberSet] ){
  721. }
  722. }
  723. -(int) didServerResultFailed:(JXConnection*)aDownload dict:(NSDictionary*)dict{
  724. [_wait hide];
  725. return show_error;
  726. }
  727. -(int) didServerConnectError:(JXConnection*)aDownload error:(NSError *)error{//error为空时,代表超时
  728. [_wait hide];
  729. return show_error;
  730. }
  731. -(void) didServerConnectStart:(JXConnection*)aDownload{
  732. /// [_wait start];
  733. }
  734. //筛选点击
  735. - (void)topItemBtnClick:(UIButton *)btn{
  736. [self checkAfterScroll:(btn.tag-100)];
  737. [_topSiftView resetAllParaBtn];
  738. }
  739. - (void)checkAfterScroll:(CGFloat)offsetX{
  740. if (offsetX == 0) {
  741. _selMenu = 0;
  742. if (_myGroupArray.count <= 0) {
  743. [self scrollToPageUp];
  744. }else {
  745. [self.tableView reloadData];
  746. }
  747. }else {
  748. _selMenu = 1;
  749. if (_allGroupArray.count <= 0) {
  750. [self scrollToPageUp];
  751. }else {
  752. [self.tableView reloadData];
  753. }
  754. }
  755. }
  756. -(void)scrollToPageUp{
  757. if(_isLoading)
  758. return;
  759. _page = 0;
  760. [self performSelector:@selector(stopLoading) withObject:nil afterDelay:1.0];
  761. if(_selMenu==1){
  762. [g_server listRoom:_page roomName:nil toView:self];
  763. }
  764. else{
  765. [g_server listHisRoom:_page pageSize:1000 toView:self];
  766. _searchfield.text = @"";
  767. }
  768. }
  769. -(void)getServerData{
  770. self.isShowFooterPull = _selMenu == 1;
  771. if(_selMenu==1){
  772. [g_server listRoom:_page roomName:nil toView:self];
  773. self.isShowFooterPull = YES;
  774. }
  775. else{
  776. self.isShowFooterPull = NO;
  777. _myGroupArray = [[JXUserObject sharedInstance] fetchAllRoomsFromLocal];
  778. [_currentGroupArray removeAllObjects];
  779. _currentGroupArray = [[NSMutableArray alloc]initWithArray:_myGroupArray] ;
  780. dispatch_async(dispatch_get_main_queue(), ^{
  781. self.footeView.text=[NSString stringWithFormat:@"%zd个群聊",_currentGroupArray.count];
  782. });
  783. // [g_notify postNotificationName:kOfflineOperationUpdateUserSet object:nil];
  784. if (_myGroupArray.count <= 0) {
  785. [self scrollToPageUp];
  786. }else {
  787. [self.tableView reloadData];
  788. }
  789. }
  790. }
  791. -(void)onReceiveRoomRemind:(NSNotification *)notifacation//更改名称
  792. {
  793. NSMutableArray * tempArray;
  794. if (_selMenu == 0) {
  795. tempArray = _myGroupArray;
  796. }else if (_selMenu == 1) {
  797. tempArray = _allGroupArray;
  798. }
  799. JXRoomRemind* p = (JXRoomRemind *)notifacation.object;
  800. if([p.type intValue] == kRoomRemind_RoomName){
  801. for(int i=0;i<[tempArray count];i++){
  802. JXUserObject *user=tempArray[i];
  803. if([p.objectId isEqualToString:user.userId]){
  804. user.userNickname = p.content;
  805. // [dict setValue:p.content forKey:@"name"];
  806. NSIndexPath* row = [NSIndexPath indexPathForRow:i inSection:0];
  807. JXCell* cell = (JXCell*)[_table cellForRowAtIndexPath:row];
  808. cell.title = user.userNickname;
  809. cell = nil;
  810. break;
  811. }
  812. // dict = nil;
  813. }
  814. // self.title = p.content;
  815. }
  816. if([p.type intValue] == kRoomRemind_DelMember || [p.type intValue] == kRoomRemind_DelRoom){
  817. for(int i=0;i<[tempArray count];i++){
  818. JXUserObject *user=tempArray[i];
  819. if([p.objectId isEqualToString:user.userId] && [p.toUserId isEqualToString:MY_USER_ID]){
  820. [tempArray removeObjectAtIndex:i];
  821. _refreshCount++;
  822. [_table reloadData];
  823. break;
  824. }
  825. // dict = nil;
  826. }
  827. }
  828. }
  829. -(void)onQuitRoom:(NSNotification *)notifacation//删除房间
  830. {
  831. NSMutableArray * tempArray;
  832. if (_selMenu == 0) {
  833. tempArray = _myGroupArray;
  834. }else if (_selMenu == 1) {
  835. tempArray = _allGroupArray;
  836. }
  837. JXRoomObject* p = (JXRoomObject *)notifacation.object;
  838. for(int i=0;i<[tempArray count];i++){
  839. JXUserObject *user=tempArray[i];
  840. if([p.roomJid isEqualToString:user.userId]){
  841. [tempArray removeObjectAtIndex:i];
  842. _refreshCount++;
  843. [_table reloadData];
  844. break;
  845. }
  846. // dict = nil;
  847. }
  848. p = nil;
  849. }
  850. @end