JXGroupViewController.m 36 KB

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