JXSelectFriendsVC.m 57 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438
  1. //
  2. // JXSelectFriendsVC.m
  3. // shiku_im
  4. //
  5. // Created by p on 2018/7/2.
  6. // Copyright © 2018年 Reese. All rights reserved.
  7. //
  8. #import "JXSelectFriendsVC.h"
  9. #import "JXChatViewController.h"
  10. #import "AppDelegate.h"
  11. #import "JXLabel.h"
  12. #import "JXImageView.h"
  13. #import "JXCell.h"
  14. #import "JXRoomPool.h"
  15. #import "JXTableView.h"
  16. #import "JXNewFriendViewController.h"
  17. #import "menuImageView.h"
  18. #import "QCheckBox.h"
  19. #import "JXRoomObject.h"
  20. #import "NSString+ContainStr.h"
  21. #import "JXMessageObject.h"
  22. #import "BMChineseSort.h"
  23. #import "JXGroupViewController.h"
  24. #import "JXFaceCreateRoomVC.h"
  25. #import "JXSelectFriendBottomView.h"
  26. #import "JXChatViewC.h"
  27. #define HEIGHT 55
  28. @interface JXSelectFriendsVC ()<UITextFieldDelegate, UIAlertViewDelegate,JXRoomObjectDelegate>
  29. @property (nonatomic, strong) UIButton* finishBtn;
  30. @property (nonatomic, strong) NSMutableArray *checkBoxArr;
  31. @property (nonatomic, strong) UIView *backView;
  32. @property (nonatomic,strong) NSMutableArray *checkUserArr;
  33. @end
  34. @implementation JXSelectFriendsVC
  35. @synthesize chatRoom,room,isNewRoom,set,array=_array;
  36. - (id)init
  37. {
  38. self = [super init];
  39. if (self) {
  40. self.heightHeader = JX_SCREEN_TOP;
  41. self.heightFooter = 50+JX_SCREEN_BOTTOM_SAFE_AREA;
  42. self.isGotoBack = YES;
  43. //self.view.frame = g_window.bounds;
  44. self.isShowFooterPull = NO;
  45. _searchArray = [NSMutableArray array];
  46. _checkUserArr = [NSMutableArray array];
  47. _userIds = [NSMutableArray array];
  48. _userNames = [NSMutableArray array];
  49. set = [[NSMutableSet alloc] init];
  50. _indexArray = [NSMutableArray array];
  51. _letterResultArr = [NSMutableArray array];
  52. _checkBoxArr = [NSMutableArray array];
  53. _selMenu = 0;
  54. [g_notify addObserver:self selector:@selector(newReceipt:) name:kXMPPReceiptNotifaction object:nil];
  55. [g_notify addObserver:self selector:@selector(onSendTimeout:) name:kXMPPSendTimeOutNotifaction object:nil];
  56. [g_notify addObserver:self selector:@selector(refreshNotif:) name:kLabelVCRefreshNotif object:nil];
  57. [g_notify addObserver:self selector:@selector(disSelectUserChange:) name:@"disselectuserchange" object:nil];
  58. [g_notify addObserver:self selector:@selector(onInsert) name:@"nextAction" object:nil];
  59. }
  60. return self;
  61. }
  62. - (void)refreshNotif:(NSNotification *)notif {
  63. [self actionQuit];
  64. }
  65. -(void)dealloc{
  66. //移除监听
  67. [g_notify removeObserver:self];
  68. [set removeAllObjects];
  69. [_array removeAllObjects];
  70. }
  71. - (void)viewDidLoad
  72. {
  73. [super viewDidLoad];
  74. [self createHeadAndFoot];
  75. if (_type == JXSelectFriendTypeGroupAT ||_type == JXSelectFriendTypeSpecifyAdmin) {
  76. }else{
  77. _finishBtn = [UIButton buttonWithType:UIButtonTypeSystem];
  78. [_finishBtn setTitle:Localized(@"JX_Confirm") forState:UIControlStateNormal];
  79. [_finishBtn setTitle:Localized(@"JX_Confirm") forState:UIControlStateHighlighted];
  80. [_finishBtn setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
  81. _finishBtn.layer.masksToBounds = YES;
  82. _finishBtn.layer.cornerRadius = 3.f;
  83. [_finishBtn setBackgroundColor:THEMECOLOR];
  84. [_finishBtn.titleLabel setFont:SYSFONT(15)];
  85. _finishBtn.frame = CGRectMake(JX_SCREEN_WIDTH - 51 - 15, JX_SCREEN_TOP - 8 - 29, 51, 29);
  86. [_finishBtn addTarget:self action:@selector(onAdd) forControlEvents:UIControlEventTouchUpInside];
  87. // [self.tableHeader addSubview:_finishBtn];
  88. JXSelectFriendBottomView *view = [[JXSelectFriendBottomView alloc] initWithFrame:CGRectMake(0, JX_SCREEN_HEIGHT - JX_SCREEN_BOTTOM_SAFE_AREA - 50, JX_SCREEN_WIDTH, 50)];
  89. //view.backgroundColor=[UIColor yellowColor];
  90. [self.view addSubview:view];
  91. }
  92. [self customSearchTextField];
  93. [self getDataArrayByType];
  94. }
  95. -(void)getDataArrayByType{
  96. self.isShowFooterPull = NO;
  97. self.isShowHeaderPull = NO;
  98. if (_type == JXSelectFriendTypeGroupAT || _type == JXSelectFriendTypeSelMembers) {
  99. if(_type == JXSelectFriendTypeSelMembers){
  100. self.title = Localized(@"JXSip_invite");
  101. [self getSelUserTypeSelMembersArray];
  102. }else{
  103. self.title = Localized(@"JX_GroupAtMember");
  104. [self getGroupATRoomMembersArray];
  105. }
  106. [_table reloadData];
  107. }else if(_type == JXSelectFriendTypeSpecifyAdmin){
  108. self.title = Localized(@"JXRoomMemberVC_SetAdministrator");
  109. [self getRoomMembersArray];
  110. [_table reloadData];
  111. }else if (_type == JXSelectFriendTypeCustomArray) {
  112. // self.title
  113. //选择拼音 转换的 方法
  114. BMChineseSortSetting.share.sortMode = 2; // 1或2
  115. //排序 Person对象
  116. [BMChineseSort sortAndGroup:_array key:@"userNickname" finish:^(bool isSuccess, NSMutableArray *unGroupArr, NSMutableArray *sectionTitleArr, NSMutableArray<NSMutableArray *> *sortedObjArr) {
  117. if (isSuccess) {
  118. self.indexArray = sectionTitleArr;
  119. self.letterResultArr = sortedObjArr;
  120. [_table reloadData];
  121. }
  122. }];
  123. }
  124. else{
  125. if (_isPlusButtonComming) {
  126. self.title = @"选择群成员";
  127. }else {
  128. self.title = Localized(@"JXSelFriendVC_SelFriend");
  129. }
  130. _array=[[NSMutableArray alloc] init];
  131. [self refresh];
  132. }
  133. }
  134. - (void)viewWillAppear:(BOOL)animated
  135. {
  136. [super viewWillAppear:animated];
  137. }
  138. - (void)customSearchTextField{
  139. int height = 55;
  140. if (_isPlusButtonComming) {
  141. height = 55 * 3;
  142. }
  143. //搜索输入框
  144. UIView *backView = [[UIView alloc] initWithFrame:CGRectMake(0, JX_SCREEN_TOP, JX_SCREEN_WIDTH, 55)];
  145. // backView.backgroundColor = HEXCOLOR(0xf0f0f0);
  146. // [self.view addSubview:backView];
  147. self.tableView.tableHeaderView=backView;
  148. _backView = backView;
  149. // UIButton *cancelBtn = [[UIButton alloc] initWithFrame:CGRectMake(backView.frame.size.width-5-45, 5, 45, 30)];
  150. // [cancelBtn setTitle:Localized(@"JX_Cencal") forState:UIControlStateNormal];
  151. // [cancelBtn setTitleColor:THEMECOLOR forState:UIControlStateNormal];
  152. // [cancelBtn addTarget:self action:@selector(cancelBtnAction) forControlEvents:UIControlEventTouchUpInside];
  153. // cancelBtn.titleLabel.font = SYSFONT(14);
  154. // [backView addSubview:cancelBtn];
  155. _seekTextField = [[UITextField alloc] initWithFrame:CGRectMake(15, 10, backView.frame.size.width - 30, 35)];
  156. _seekTextField.placeholder =@"搜索"; Localized(@"JX_EnterKeyword");
  157. _seekTextField.textColor = [UIColor blackColor];
  158. [_seekTextField setFont:SYSFONT(14)];
  159. _seekTextField.backgroundColor = HEXCOLOR(0xf0f0f0);
  160. UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"card_search"]];
  161. UIView *leftView = [[UIView alloc ]initWithFrame:CGRectMake(0, 0, 30, 30)];
  162. // imageView.center = CGPointMake(leftView.frame.size.width/2, leftView.frame.size.height/2);
  163. imageView.center = leftView.center;
  164. [leftView addSubview:imageView];
  165. _seekTextField.leftView = leftView;
  166. _seekTextField.leftViewMode = UITextFieldViewModeAlways;
  167. _seekTextField.borderStyle = UITextBorderStyleNone;
  168. _seekTextField.layer.masksToBounds = YES;
  169. _seekTextField.layer.cornerRadius = 3.f;
  170. _seekTextField.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter;
  171. _seekTextField.delegate = self;
  172. _seekTextField.returnKeyType = UIReturnKeyGoogle;
  173. [backView addSubview:_seekTextField];
  174. [_seekTextField addTarget:self action:@selector(textFieldDidChange:) forControlEvents:UIControlEventEditingChanged];
  175. if (_isPlusButtonComming) {
  176. return;
  177. // 选择一个群
  178. int h=45;
  179. int w=JX_SCREEN_WIDTH;
  180. JXImageView* iv;
  181. iv = [self createButton:@"选择一个群" drawTop:YES drawBottom:YES icon:nil click:@selector(onSelectAgroup)];
  182. iv.frame = CGRectMake(0,h, w, HEIGHT);
  183. h+=iv.frame.size.height;
  184. // 面对面建群
  185. iv = [self createButton:Localized(@"JX_FaceToFaceGroup") drawTop:YES drawBottom:NO icon:nil click:@selector(onFaceCreateRoom)];
  186. iv.frame = CGRectMake(0,h, w, HEIGHT);
  187. }
  188. self.tableView.tableHeaderView = backView;
  189. }
  190. - (void)onSelectAgroup {
  191. JXGroupViewController *vc = [[JXGroupViewController alloc] init];
  192. [g_navigation pushViewController:vc animated:YES];
  193. }
  194. - (void)onFaceCreateRoom {
  195. JXFaceCreateRoomVC *vc = [[JXFaceCreateRoomVC alloc] init];
  196. [g_navigation pushViewController:vc animated:YES];
  197. }
  198. -(JXImageView*)createButton:(NSString*)title drawTop:(BOOL)drawTop drawBottom:(BOOL)drawBottom icon:(NSString*)icon click:(SEL)click{
  199. JXImageView* btn = [[JXImageView alloc] init];
  200. btn.backgroundColor = [UIColor whiteColor];
  201. btn.userInteractionEnabled = YES;
  202. btn.didTouch = click;
  203. btn.delegate = self;
  204. [self.backView addSubview:btn];
  205. JXLabel* p = [[JXLabel alloc] initWithFrame:CGRectMake(15, 0, JX_SCREEN_WIDTH-100, HEIGHT)];
  206. p.text = title;
  207. p.font = g_factory.font16;
  208. p.backgroundColor = [UIColor clearColor];
  209. p.textColor = [UIColor blackColor];
  210. p.delegate = self;
  211. p.didTouch = click;
  212. [btn addSubview:p];
  213. if(icon){
  214. UIImageView* iv = [[UIImageView alloc] initWithFrame:CGRectMake(10, (HEIGHT-20)/2, 20, 20)];
  215. iv.image = [UIImage imageNamed:icon];
  216. [btn addSubview:iv];
  217. }
  218. if(drawTop){
  219. UIView* line = [[UIView alloc] initWithFrame:CGRectMake(15,0,JX_SCREEN_WIDTH-15,LINE_WH)];
  220. line.backgroundColor = THE_LINE_COLOR;
  221. [btn addSubview:line];
  222. }
  223. if(drawBottom){
  224. UIView* line = [[UIView alloc] initWithFrame:CGRectMake(15,HEIGHT-LINE_WH,JX_SCREEN_WIDTH-15,LINE_WH)];
  225. line.backgroundColor = THE_LINE_COLOR;
  226. [btn addSubview:line];
  227. }
  228. if(click){
  229. UIImageView* iv;
  230. iv = [[UIImageView alloc] initWithFrame:CGRectMake(JX_SCREEN_WIDTH-15-7, (HEIGHT-13)/2, 7, 13)];
  231. iv.image = [UIImage imageNamed:@"new_icon_>"];
  232. [btn addSubview:iv];
  233. }
  234. return btn;
  235. }
  236. - (void) textFieldDidChange:(UITextField *)textField {
  237. if (textField.text.length <= 0) {
  238. [self getDataArrayByType];
  239. return;
  240. }
  241. [_searchArray removeAllObjects];
  242. // NSMutableArray *arr = [_array mutableCopy];
  243. // for (NSInteger i = 0; i < arr.count; i ++) {
  244. //
  245. // NSString * nameStr = nil;
  246. // NSString * cardNameStr = nil;
  247. // NSString * nickNameStr = nil;
  248. // if ([arr[i] isMemberOfClass:[memberData class]]) {
  249. // memberData *obj = arr[i];
  250. // nameStr = obj.userName;
  251. // cardNameStr = obj.cardName;
  252. // nickNameStr = obj.userNickName;
  253. // }else if ([arr[i] isMemberOfClass:[JXUserObject class]]) {
  254. // JXUserObject * obj = arr[i];
  255. // nameStr = obj.userNickname;
  256. // }
  257. // nameStr = !nameStr ? @"" : nameStr;
  258. // cardNameStr = !cardNameStr ? @"" : cardNameStr;
  259. // nickNameStr = !nickNameStr ? @"" : nickNameStr;
  260. // NSString * allStr = [NSString stringWithFormat:@"%@%@%@",nameStr,cardNameStr,nickNameStr];
  261. // if ([[allStr lowercaseString] containsMyString:[textField.text lowercaseString]]) {
  262. // [_searchArray addObject:arr[i]];
  263. // }
  264. //
  265. // }
  266. if (_type == JXSelectFriendTypeGroupAT || _type == JXSelectFriendTypeSelMembers || _type == JXSelectFriendTypeSpecifyAdmin) {
  267. // _searchArray = [memberData searchMemberByFilter:textField.text room:room.roomId];
  268. for (NSInteger i = 0; i < _array.count; i ++) {
  269. memberData *data = _array[i];
  270. memberData *data1 = [self.room getMember:g_myself.userId];
  271. JXUserObject *allUser = [[JXUserObject alloc] init];
  272. allUser = [allUser getUserById:[NSString stringWithFormat:@"%ld",data.userId]];
  273. NSString *name = [NSString string];
  274. if ([data1.role intValue] == 1) {
  275. name = data.lordRemarkName ? data.lordRemarkName : allUser.remarkName.length > 0 ? allUser.remarkName : data.userNickName;
  276. }else {
  277. name = allUser.remarkName.length > 0 ? allUser.remarkName : data.userNickName;
  278. }
  279. NSString *userStr = [name lowercaseString];
  280. NSString *textStr = [textField.text lowercaseString];
  281. if ([userStr rangeOfString:textStr].location != NSNotFound) {
  282. [_searchArray addObject:data];
  283. }
  284. }
  285. }else{
  286. // 搜索手机号,昵称,备注名
  287. _array = [[JXUserObject sharedInstance] fetchFriendsFromLocalWhereLikeNickNameOrRemarkNameOrTelephone:textField.text];
  288. for (NSInteger i = 0; i < _array.count; i ++) {
  289. JXUserObject * user = _array[i];
  290. NSString *userStr = [user.userNickname lowercaseString];
  291. NSString *remarkNameStr = [user.remarkName lowercaseString];
  292. NSString *telephoneStr = [user.telephone lowercaseString];
  293. NSString *textStr = [textField.text lowercaseString];
  294. if ([userStr rangeOfString:textStr].location != NSNotFound || [remarkNameStr rangeOfString:textStr].location != NSNotFound || [telephoneStr rangeOfString:textStr].location != NSNotFound) {
  295. [_searchArray addObject:user];
  296. }
  297. }
  298. }
  299. // _searchArray = [memberData searchMemberByFilter:textField.text room:room.roomId];
  300. [self.tableView reloadData];
  301. }
  302. - (void) cancelBtnAction {
  303. _seekTextField.text = nil;
  304. [_seekTextField resignFirstResponder];
  305. [self getDataArrayByType];
  306. }
  307. - (void)didReceiveMemoryWarning
  308. {
  309. [super didReceiveMemoryWarning];
  310. // Dispose of any resources that can be recreated.
  311. }
  312. #pragma mark ---------tableView协议----------------
  313. -(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
  314. {
  315. if (_seekTextField.text.length > 0) {
  316. return 1;
  317. }
  318. return [self.indexArray count];
  319. }
  320. - (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {
  321. if (_seekTextField.text.length > 0) {
  322. return Localized(@"JXFriend_searchTitle");
  323. }
  324. return [self.indexArray objectAtIndex:section];
  325. }
  326. -(void)tableView:(UITableView *)tableView willDisplayHeaderView:(UIView *)view forSection:(NSInteger)section{
  327. UITableViewHeaderFooterView *header = (UITableViewHeaderFooterView *)view;
  328. header.tintColor = HEXCOLOR(0xF2F2F2);
  329. [header.textLabel setTextColor:HEXCOLOR(0x999999)];
  330. [header.textLabel setFont:SYSFONT(15)];
  331. }
  332. -(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
  333. {
  334. if (_seekTextField.text.length > 0) {
  335. return _searchArray.count;
  336. }
  337. return [(NSArray *)[self.letterResultArr objectAtIndex:section] count];
  338. }
  339. -(NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView{
  340. if (_seekTextField.text.length > 0) {
  341. return nil;
  342. }
  343. return self.indexArray;
  344. }
  345. - (NSInteger)tableView:(UITableView *)tableView sectionForSectionIndexTitle:(NSString *)title atIndex:(NSInteger)index{
  346. return index;
  347. }
  348. - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
  349. {
  350. JXCell *cell=nil;
  351. NSString* cellName = [NSString stringWithFormat:@"selVC_%ld_%ld",indexPath.section,indexPath.row];
  352. cell = [tableView dequeueReusableCellWithIdentifier:cellName];
  353. // if(cell==nil){
  354. memberData *data = [self.room getMember:g_myself.userId];
  355. if (_type == JXSelectFriendTypeGroupAT || _type == JXSelectFriendTypeSpecifyAdmin || _type == JXSelectFriendTypeSelMembers) {
  356. if (!cell) {
  357. cell = [[JXCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellName];
  358. }
  359. cell.selectionStyle = UITableViewCellSelectionStyleNone;
  360. memberData * member;
  361. if (_seekTextField.text.length > 0) {
  362. member = _searchArray[indexPath.row];
  363. }else{
  364. member = [[self.letterResultArr objectAtIndex:indexPath.section] objectAtIndex:indexPath.row];
  365. }
  366. // cell = [[JXCell alloc] init];
  367. [_table addToPool:cell];
  368. NSString *name = [NSString string];
  369. JXUserObject *allUser = [[JXUserObject alloc] init];
  370. allUser = [allUser getUserById:[NSString stringWithFormat:@"%ld",member.userId]];
  371. if (_type == JXSelectFriendTypeSelMembers) {
  372. if ([data.role intValue] == 1) {
  373. name = member.lordRemarkName ? member.lordRemarkName : allUser.remarkName.length > 0 ? allUser.remarkName : member.userNickName;
  374. }else {
  375. name = allUser.remarkName.length > 0 ? allUser.remarkName : member.userNickName;
  376. }
  377. }else {
  378. name = member.userNickName;
  379. }
  380. if (!self.room.allowSendCard && [data.role intValue] != 1 && [data.role intValue] != 2 && member.userId > 0) {
  381. name = [name substringToIndex:[name length]-1];
  382. name = [name stringByAppendingString:@"*"];
  383. }
  384. cell.title = name;
  385. cell.positionTitle = [self positionStrRole:[member.role integerValue]];
  386. if(!member.idStr){//所有人不显示
  387. // cell.subtitle = [NSString stringWithFormat:@"%ld",member.userId];
  388. }else{
  389. cell.headImage = @"groupImage";
  390. }
  391. // cell.bottomTitle = [TimeUtil formatDate:user.timeCreate format:@"MM-dd HH:mm"];
  392. cell.userId = [NSString stringWithFormat:@"%ld",member.userId];
  393. // [cell initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellName];
  394. cell.isSmall = YES;
  395. [cell headImageViewImageWithUserId:nil roomId:nil];
  396. if (_type == JXSelectFriendTypeGroupAT) {
  397. if(member.idStr){
  398. if (room.roomId != nil) {
  399. // NSString *groupImagePath = [NSString stringWithFormat:@"%@%@/%@.%@",NSTemporaryDirectory(),g_myself.userId,room.roomId,@"jpg"];
  400. // if (groupImagePath && [[NSFileManager defaultManager] fileExistsAtPath:groupImagePath]) {
  401. // cell.headImageView.image = [UIImage imageWithContentsOfFile:groupImagePath];
  402. // }else{
  403. // [roomData roomHeadImageRoomId:room.roomId toView:cell.headImageView];
  404. // }
  405. [g_server getRoomHeadImageSmall:room.roomJid roomId:room.roomId imageView:cell.headImageView];
  406. }
  407. }
  408. }
  409. if(_type == JXSelectFriendTypeSelMembers){
  410. QCheckBox* btn = [[QCheckBox alloc] initWithDelegate:self];
  411. btn.frame = CGRectMake(13, 18.5, 22, 22);
  412. btn.tag = (indexPath.section+1) * 100000 + (indexPath.row+1);
  413. BOOL b = NO;
  414. NSString* s = [NSString stringWithFormat:@"%ld",member.userId];
  415. b = [_existSet containsObject:s];
  416. btn.selected = b;
  417. btn.userInteractionEnabled = !b;
  418. [cell addSubview:btn];
  419. [_checkBoxArr addObject:btn];
  420. }
  421. }else if (_type == JXSelectFriendTypeCustomArray || _type == JXSelectFriendTypeDisAble) {
  422. if (!cell) {
  423. cell = [[JXCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellName];
  424. }
  425. cell.selectionStyle = UITableViewCellSelectionStyleNone;
  426. JXUserObject *user;
  427. if (_seekTextField.text.length > 0) {
  428. user = _searchArray[indexPath.row];
  429. }else{
  430. user = [[self.letterResultArr objectAtIndex:indexPath.section] objectAtIndex:indexPath.row];
  431. }
  432. [_table addToPool:cell];
  433. cell.title = user.remarkName.length > 0 ? user.remarkName : user.userNickname;
  434. // cell.subtitle = user.userId;
  435. // cell.bottomTitle = [TimeUtil formatDate:user.timeCreate format:@"MM-dd HH:mm"];
  436. cell.userId = user.userId;
  437. cell.isSmall = YES;
  438. [cell headImageViewImageWithUserId:nil roomId:nil];
  439. // cell.headImage = user.userHead;
  440. // [cell initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellName];
  441. QCheckBox* btn = [[QCheckBox alloc] initWithDelegate:self];
  442. btn.frame = CGRectMake(13, 18.5, 22, 22);
  443. btn.tag = (indexPath.section+1) * 100000 + (indexPath.row+1);
  444. if (self.disableSet) {
  445. btn.enabled = ![_disableSet containsObject:user.userId];
  446. }else{
  447. btn.enabled = YES;
  448. }
  449. [_checkBoxArr addObject:btn];
  450. [cell addSubview:btn];
  451. }else{ // 创建新群 &&
  452. JXUserObject *user;
  453. if (_seekTextField.text.length > 0) {
  454. user = _searchArray[indexPath.row];
  455. }else{
  456. user = [[self.letterResultArr objectAtIndex:indexPath.section] objectAtIndex:indexPath.row];
  457. }
  458. // cell = [[JXCell alloc] init];
  459. // if (!cell) {
  460. cell = [[JXCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellName];
  461. cell.isShowNicknameRemarkNameTelphoneNumber = YES;
  462. //user.phone;// 服务器接口不返回电话,数据库未存储
  463. NSString *telephone = user.telephone;
  464. if (telephone.length>2) {
  465. if ([[telephone substringWithRange:NSMakeRange(0,2)] isEqualToString:@"86"]) {
  466. telephone = [telephone substringFromIndex:2];
  467. }
  468. }
  469. [cell setSubtitle:[NSString stringWithFormat:@"手机号: %@",telephone]];
  470. QCheckBox* btn = [[QCheckBox alloc] initWithDelegate:self];
  471. btn.userInteractionEnabled = NO;
  472. btn.frame = CGRectMake(JX_SCREEN_WIDTH - 22 - 20, 18.5, 22, 22);
  473. btn.tag = (indexPath.section+1) * 100000 + (indexPath.row+1);
  474. BOOL b = NO;
  475. if (self.addressBookArr.count > 0) {
  476. if ([_existSet containsObject:user.userId]) {
  477. btn.selected = [_existSet containsObject:user.userId];
  478. [self didSelectedCheckBox:btn checked:btn.selected];
  479. }
  480. }else {
  481. if (room){
  482. b = [room isMember:user.userId];
  483. BOOL flag = NO;
  484. for (NSInteger i = 0; i < _userIds.count; i ++) {
  485. NSString *selUserId = _userIds [i];
  486. if ([user.userId isEqualToString:selUserId]) {
  487. flag = YES;
  488. break;
  489. }
  490. }
  491. btn.selected = flag;
  492. // btn.userInteractionEnabled = !flag;
  493. btn.userInteractionEnabled = NO;
  494. // btn.selected = b;
  495. // btn.userInteractionEnabled = !b;
  496. }else{
  497. b = [_existSet containsObject:user.userId];
  498. BOOL flag = NO;
  499. for (NSInteger i = 0; i < _userIds.count; i ++) {
  500. NSString *selUserId = _userIds [i];
  501. if ([user.userId isEqualToString:selUserId]) {
  502. flag = YES;
  503. break;
  504. }
  505. }
  506. if (b) {
  507. if (_type == JXSelectFriendTypeSelFriends) {
  508. btn.selected = b;
  509. }else {
  510. btn.enabled = !b;
  511. }
  512. }else {
  513. if (_type == JXSelectFriendTypeSelFriends) {
  514. btn.selected = flag;
  515. }else {
  516. btn.enabled = !b;
  517. btn.selected = flag;
  518. }
  519. }
  520. [self didSelectedCheckBox:btn checked:btn.selected];
  521. }
  522. }
  523. [_checkBoxArr addObject:btn];
  524. [cell addSubview:btn];
  525. // }
  526. cell.selectionStyle = UITableViewCellSelectionStyleNone;
  527. [_table addToPool:cell];
  528. // cell.title = user.remarkName.length > 0 ? user.remarkName : user.userNickname;
  529. NSString *remarkName = user.remarkName.length>0 ? [NSString stringWithFormat:@"(%@)", user.remarkName] : @"";
  530. NSLog(@"-----------%@\n", user.userNickname);
  531. cell.title = [NSString stringWithFormat:@"%@ %@", user.userNickname, remarkName];
  532. // cell.subtitle = user.userId;
  533. cell.bottomTitle = [TimeUtil formatDate:user.timeCreate format:@"MM-dd HH:mm"];
  534. cell.userId = user.userId;
  535. cell.isSmall = YES;
  536. [cell headImageViewImageWithUserId:nil roomId:nil];
  537. }
  538. // CGFloat headX = 13*2+22;
  539. CGFloat headX = 22;
  540. cell.headImageView.frame = CGRectMake(headX+30,9.5,40,40);
  541. cell.headImageView.layer.cornerRadius = cell.headImageView.frame.size.width / 2;
  542. cell.lbTitle.frame = CGRectMake(CGRectGetMaxX(cell.headImageView.frame)+15, 12, JX_SCREEN_WIDTH - 115 -CGRectGetMaxX(cell.headImageView.frame)-14, 18);
  543. cell.lbSubTitle.frame = CGRectMake(CGRectGetMaxX(cell.headImageView.frame)+15, cell.lbSubTitle.frame.origin.y, JX_SCREEN_WIDTH - 55 -CGRectGetMaxX(cell.headImageView.frame)-14, cell.lbSubTitle.frame.size.height);
  544. cell.lineView.frame = CGRectMake(CGRectGetMaxX(cell.headImageView.frame)+15,59-LINE_WH,JX_SCREEN_WIDTH,LINE_WH);
  545. if (indexPath.row == [(NSArray *)[self.letterResultArr objectAtIndex:indexPath.section] count]-1) {
  546. cell.lineView.frame = CGRectMake(cell.lineView.frame.origin.x, cell.lineView.frame.origin.y, cell.lineView.frame.size.width,0);
  547. }else {
  548. cell.lineView.frame = CGRectMake(cell.lineView.frame.origin.x, cell.lineView.frame.origin.y, cell.lineView.frame.size.width,LINE_WH);
  549. }
  550. // cell.headImageView.frame = CGRectMake(cell.headImageView.frame.origin.x + 50, cell.headImageView.frame.origin.y, cell.headImageView.frame.size.width, cell.headImageView.frame.size.height);
  551. // cell.lbTitle.frame = CGRectMake(cell.lbTitle.frame.origin.x + 50, cell.lbTitle.frame.origin.y, cell.lbTitle.frame.size.width, cell.lbTitle.frame.size.height);
  552. // }
  553. // else{
  554. //
  555. // NSLog(cellName);
  556. // }
  557. return cell;
  558. }
  559. -(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
  560. {
  561. if (_type == JXSelectFriendTypeGroupAT) {
  562. memberData * member;
  563. if (_seekTextField.text.length > 0) {
  564. member = _searchArray[indexPath.row];
  565. }else{
  566. member = [[self.letterResultArr objectAtIndex:indexPath.section] objectAtIndex:indexPath.row];
  567. }
  568. if(self.delegate != nil && [self.delegate respondsToSelector:self.didSelect])
  569. [self.delegate performSelectorOnMainThread:self.didSelect withObject:member waitUntilDone:YES];
  570. [self actionQuit];
  571. // _pSelf = nil;
  572. }else if (_type == JXSelectFriendTypeSpecifyAdmin) {
  573. memberData * member;
  574. if (_seekTextField.text.length > 0) {
  575. member = _searchArray[indexPath.row];
  576. }else{
  577. member = [[self.letterResultArr objectAtIndex:indexPath.section] objectAtIndex:indexPath.row];
  578. }
  579. if ([member.role intValue] == 1) {
  580. [g_App showAlert:Localized(@"JXGroup_CantSetSelf")];
  581. return;
  582. }
  583. if(self.delegate != nil && [self.delegate respondsToSelector:self.didSelect])
  584. [self.delegate performSelectorOnMainThread:self.didSelect withObject:member waitUntilDone:YES];
  585. [self actionQuit];
  586. // _pSelf = nil;
  587. }else {
  588. if (_type == JXSelectFriendTypeSelMembers) {
  589. memberData *user;
  590. if (_seekTextField.text.length > 0) {
  591. user = _searchArray[indexPath.row];
  592. }else{
  593. user = [[self.letterResultArr objectAtIndex:indexPath.section] objectAtIndex:indexPath.row];
  594. }
  595. if (![_existSet containsObject:[NSString stringWithFormat:@"%ld",user.userId]]) {
  596. QCheckBox *checkBox = nil;
  597. // for (NSInteger i = 0; i < _checkBoxArr.count; i ++) {
  598. // QCheckBox *btn = _checkBoxArr[i];
  599. // if (btn.tag / 1000 == indexPath.section && btn.tag % 1000 == indexPath.row) {
  600. // checkBox = btn;
  601. // break;
  602. // }
  603. // }
  604. JXCell *cell = [tableView cellForRowAtIndexPath:indexPath];
  605. checkBox = [cell viewWithTag:(indexPath.section+1) * 100000 + (indexPath.row+1)];
  606. checkBox.selected = !checkBox.selected;
  607. // user.isSelected = checkBox.selected;
  608. // user.checkBox = checkBox;
  609. [self didSelectedCheckBox:checkBox checked:checkBox.selected];
  610. [[NSNotificationCenter defaultCenter] postNotificationName:@"selectuserchangeUser" object:_checkUserArr];
  611. }
  612. }else {
  613. JXUserObject *user;
  614. if (_seekTextField.text.length > 0) {
  615. user = _searchArray[indexPath.row];
  616. }else{
  617. user = [[self.letterResultArr objectAtIndex:indexPath.section] objectAtIndex:indexPath.row];
  618. }
  619. // if (![_existSet containsObject:user.userId]) {
  620. QCheckBox *checkBox = nil;
  621. // for (NSInteger i = 0; i < _checkBoxArr.count; i ++) {
  622. // QCheckBox *btn = _checkBoxArr[i];
  623. // if (btn.tag / 1000 == indexPath.section && btn.tag % 1000 == indexPath.row) {
  624. // checkBox = btn;
  625. // break;
  626. // }
  627. // }
  628. JXCell *cell = [tableView cellForRowAtIndexPath:indexPath];
  629. checkBox = [cell viewWithTag:(indexPath.section+1) * 100000 + (indexPath.row+1)];
  630. if (!checkBox.enabled) {
  631. return;
  632. }
  633. checkBox.selected = !checkBox.selected;
  634. [self didSelectedCheckBox:checkBox checked:checkBox.selected];
  635. NSLog(@"----------------------%d", checkBox.selected);
  636. user.isSelected = checkBox.selected;
  637. user.checkBox = checkBox;
  638. // 发送通知给bottomCell
  639. [[NSNotificationCenter defaultCenter] postNotificationName:@"selectuserchange" object:user];
  640. //[[NSNotificationCenter defaultCenter] postNotificationName:@"selectuserchange" object:user];
  641. // }
  642. }
  643. }
  644. }
  645. - (void)disSelectUserChange:(NSNotification *)note {
  646. JXUserObject *user = note.object;
  647. [self didSelectedCheckBox:user.checkBox checked:user.isSelected];
  648. }
  649. -(void)getGroupATRoomMembersArray{
  650. _array = (NSMutableArray *)[memberData fetchAllMembers:room.roomId sortByName:YES];
  651. memberData * mem = [[memberData alloc] init];
  652. mem.userId = 0;
  653. mem.idStr = room.roomJid;
  654. mem.roomId = room.roomId;
  655. mem.userNickName = Localized(@"JX_AtALL");
  656. mem.cardName = Localized(@"JX_AtALL");
  657. mem.role = [NSNumber numberWithInt:10];
  658. // mem.createTime = [[rs objectForColumnName:@"createTime"] longLongValue];
  659. [_array insertObject:mem atIndex:0];
  660. [self reomveExistsSet];
  661. //选择拼音 转换的 方法
  662. BMChineseSortSetting.share.sortMode = 2; // 1或2
  663. //排序 Person对象
  664. [BMChineseSort sortAndGroup:_array key:@"userNickName" finish:^(bool isSuccess, NSMutableArray *unGroupArr, NSMutableArray *sectionTitleArr, NSMutableArray<NSMutableArray *> *sortedObjArr) {
  665. if (isSuccess) {
  666. self.indexArray = sectionTitleArr;
  667. self.letterResultArr = sortedObjArr;
  668. [_table reloadData];
  669. }
  670. }];
  671. // //根据Person对象的 name 属性 按中文 对 Person数组 排序
  672. // self.indexArray = [BMChineseSort IndexWithArray:_array Key:@"userNickName"];
  673. // self.letterResultArr = [BMChineseSort sortObjectArray:_array Key:@"userNickName"];
  674. }
  675. -(void)getSelUserTypeSelMembersArray{
  676. _array = (NSMutableArray *)[memberData fetchAllMembers:room.roomId sortByName:YES];
  677. [self reomveExistsSet];
  678. //选择拼音 转换的 方法
  679. BMChineseSortSetting.share.sortMode = 2; // 1或2
  680. //排序 Person对象
  681. [BMChineseSort sortAndGroup:_array key:@"userNickName" finish:^(bool isSuccess, NSMutableArray *unGroupArr, NSMutableArray *sectionTitleArr, NSMutableArray<NSMutableArray *> *sortedObjArr) {
  682. if (isSuccess) {
  683. self.indexArray = sectionTitleArr;
  684. self.letterResultArr = sortedObjArr;
  685. [_table reloadData];
  686. }
  687. }];
  688. // //根据Person对象的 name 属性 按中文 对 Person数组 排序
  689. // self.indexArray = [BMChineseSort IndexWithArray:_array Key:@"userNickName"];
  690. // self.letterResultArr = [BMChineseSort sortObjectArray:_array Key:@"userNickName"];
  691. }
  692. -(void)getRoomMembersArray{
  693. _array = (NSMutableArray *)[memberData fetchAllMembers:room.roomId sortByName:NO];
  694. [self reomveExistsSet];
  695. //选择拼音 转换的 方法
  696. BMChineseSortSetting.share.sortMode = 2; // 1或2
  697. //排序 Person对象
  698. [BMChineseSort sortAndGroup:_array key:@"userNickName" finish:^(bool isSuccess, NSMutableArray *unGroupArr, NSMutableArray *sectionTitleArr, NSMutableArray<NSMutableArray *> *sortedObjArr) {
  699. if (isSuccess) {
  700. self.indexArray = sectionTitleArr;
  701. self.letterResultArr = sortedObjArr;
  702. [_table reloadData];
  703. }
  704. }];
  705. // //根据Person对象的 name 属性 按中文 对 Person数组 排序
  706. // self.indexArray = [BMChineseSort IndexWithArray:_array Key:@"userNickName"];
  707. // self.letterResultArr = [BMChineseSort sortObjectArray:_array Key:@"userNickName"];
  708. }
  709. -(void)reomveExistsSet{
  710. for(NSInteger i=[_array count]-1;i>=0;i--){
  711. memberData* p = [_array objectAtIndex:i];
  712. if([self.existSet containsObject:[NSString stringWithFormat:@"%ld",p.userId]]>0)
  713. [_array removeObjectAtIndex:i];
  714. }
  715. }
  716. -(void)getArrayData{
  717. if (self.addressBookArr.count > 0) {
  718. [_userIds removeAllObjects];
  719. _array = [NSMutableArray arrayWithArray:self.addressBookArr];
  720. }else {
  721. _array=[[JXUserObject sharedInstance] fetchAllFriendsFromLocal];
  722. }
  723. if (self.isShowMySelf) {
  724. JXUserObject *mySelf = [[JXUserObject alloc] init];
  725. mySelf.userId = g_myself.userId;
  726. mySelf.userNickname = g_myself.userNickname;
  727. [_array insertObject:mySelf atIndex:0];
  728. }
  729. for(NSInteger i=[_array count]-1;i>=0;i--){
  730. JXUserObject* u = [_array objectAtIndex:i];
  731. for (int j=0; j<[room.members count]; j++) {
  732. memberData* p = [room.members objectAtIndex:j];
  733. if(p.userId == [u.userId intValue]){
  734. [_array removeObjectAtIndex:i];
  735. break;
  736. }
  737. }
  738. if (self.isForRoom) {
  739. if([self.forRoomUser.userId isEqualToString:u.userId]){
  740. [_array removeObjectAtIndex:i];
  741. }
  742. }
  743. if (self.addressBookArr.count > 0) {
  744. if (![_userIds containsObject:u.userId]) {
  745. [_userIds addObject:u.userId];
  746. [_userNames addObject:u.userNickname];
  747. }
  748. }
  749. }
  750. //选择拼音 转换的 方法
  751. BMChineseSortSetting.share.sortMode = 2; // 1或2
  752. //排序 Person对象
  753. [BMChineseSort sortAndGroup:_array key:@"userNickname" finish:^(bool isSuccess, NSMutableArray *unGroupArr, NSMutableArray *sectionTitleArr, NSMutableArray<NSMutableArray *> *sortedObjArr) {
  754. if (isSuccess) {
  755. self.indexArray = sectionTitleArr;
  756. self.letterResultArr = sortedObjArr;
  757. [_table reloadData];
  758. }
  759. }];
  760. // NSLog(@"------- indexArray start");
  761. // //根据Person对象的 name 属性 按中文 对 Person数组 排序
  762. // self.indexArray = [BMChineseSort IndexWithArray:_array Key:@"userNickname"];
  763. // NSLog(@"------- letterResultArr start");
  764. //
  765. // self.letterResultArr = [BMChineseSort sortObjectArray:_array Key:@"userNickname"];
  766. // NSLog(@"------- letterResultArr stop");
  767. if(isNewRoom && [_array count]<=0)//没有好友时
  768. [self performSelector:@selector(onAdd) withObject:nil afterDelay:0.1];
  769. }
  770. -(void)refresh{
  771. [self stopLoading];
  772. _refreshCount++;
  773. [_array removeAllObjects];
  774. [self getArrayData];
  775. for (NSString *userId in _existSet) {
  776. NSString *userName = [JXUserObject getUserNameWithUserId:userId];
  777. if (!userName) {
  778. userName = @"";
  779. }
  780. if (![_userIds containsObject:userId]) {
  781. [_userIds addObject:userId];
  782. [_userNames addObject:userName];
  783. }
  784. }
  785. [_table reloadData];
  786. }
  787. - (void)scrollViewDidScroll:(UIScrollView *)scrollView {
  788. [_seekTextField resignFirstResponder];
  789. }
  790. -(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
  791. {
  792. return 59;
  793. }
  794. -(void)scrollToPageUp{
  795. [self refresh];
  796. }
  797. - (void)didSelectedCheckBox:(QCheckBox *)checkbox checked:(BOOL)checked{
  798. // if (self.addressBookArr.count > 0) {
  799. if (!checkbox.enabled) {
  800. return;
  801. }
  802. if (self.type == 0 && checked && self.maxSize > 0 && _userIds.count == self.maxSize) {
  803. checkbox.selected = NO;
  804. [JXMyTools showTipView:@"群成员已达上限"];
  805. return;
  806. }
  807. id user;
  808. if (_seekTextField.text.length > 0) {
  809. user = _searchArray[checkbox.tag % 100000-1];
  810. }else{
  811. user = [[self.letterResultArr objectAtIndex:checkbox.tag / 100000-1] objectAtIndex:checkbox.tag % 100000-1];
  812. }
  813. NSString *userId;
  814. NSString *userNickname;
  815. if ([user isKindOfClass:[JXUserObject class]]) {
  816. JXUserObject *userO = (JXUserObject *)user;
  817. if (self.room.isSecretGroup) {
  818. if (!userO.publicKeyRSARoom || userO.publicKeyRSARoom.length <= 0) {
  819. checkbox.selected = NO;
  820. [JXMyTools showTipView:@"此用户不能进入私密群组"];
  821. return;
  822. }
  823. }
  824. userId = [NSString stringWithFormat:@"%@",userO.userId];
  825. userNickname = [NSString stringWithFormat:@"%@",userO.userNickname];
  826. }else if ([user isKindOfClass:[memberData class]]) {
  827. memberData *member = (memberData *)user;
  828. userId = [NSString stringWithFormat:@"%ld",member.userId];
  829. userNickname = [NSString stringWithFormat:@"%@",member.userNickName];
  830. }
  831. if(checked){ // 选定
  832. if (![_userIds containsObject:userId]) { // 所有id包含选择id
  833. [_userIds addObject:userId];
  834. [_userNames addObject:userNickname];
  835. [_checkUserArr addObject:user];
  836. }
  837. if (![set containsObject:[NSNumber numberWithInteger:checkbox.tag]]) {
  838. [set addObject:[NSNumber numberWithInteger:checkbox.tag]];
  839. }
  840. }
  841. else{ // 取消选定
  842. if ([_userIds containsObject:userId]) {
  843. NSInteger index = [_userIds indexOfObject:userId];
  844. [_userIds removeObject:userId];
  845. [_userNames removeObjectAtIndex:index];
  846. [set removeObject:[NSNumber numberWithInteger:checkbox.tag]];
  847. [_checkUserArr removeObject:user];
  848. }
  849. }
  850. // }else {
  851. // if(checked){
  852. // [set addObject:[NSNumber numberWithInteger:checkbox.tag]];
  853. // }
  854. // else{
  855. // [set removeObject:[NSNumber numberWithInteger:checkbox.tag]];
  856. // }
  857. // }
  858. }
  859. -(void)onInsert{
  860. if (_isPlusButtonComming) {
  861. NSString* s = [NSUUID UUID].UUIDString;
  862. s = [[s stringByReplacingOccurrencesOfString:@"-" withString:@""] lowercaseString];
  863. _room = [[roomData alloc] init];
  864. _room.maxCount = 10000;
  865. _room.roomJid= s;
  866. _room.name = @"群聊";
  867. _room.desc = @"他们很懒,什么都没写.";
  868. _room.userId = [g_myself.userId longLongValue];
  869. _room.userNickName = g_myself.userNickname;
  870. _room.showRead = NO;
  871. _room.showMember = YES;
  872. _room.allowSendCard = YES;
  873. _room.isNeedVerify = NO;
  874. _room.allowInviteFriend = YES;
  875. _room.allowUploadFile = YES;
  876. _room.allowConference = YES;
  877. _room.allowSpeakCourse = YES;
  878. _room.isSecretGroup = NO;
  879. NSInteger category = 510;
  880. _chatRoom = [[JXXMPP sharedInstance].roomPool createRoom:s title:_room.name];
  881. _chatRoom.delegate = self;
  882. [g_server addRoom:_room isPublic:YES isNeedVerify:_room.isNeedVerify category:category toView:self];
  883. [_wait start:Localized(@"JXAlert_CreatRoomIng") delay:30];
  884. } else {
  885. [self onAdd];
  886. }
  887. }
  888. -(void)xmppRoomDidCreate{
  889. if (_isPlusButtonComming) {
  890. NSInteger category = 510;
  891. if (_room.isSecretGroup) {
  892. NSString *g = [NSUUID UUID].UUIDString;
  893. g = [[g stringByReplacingOccurrencesOfString:@"-" withString:@""] lowercaseString];
  894. _room.chatKeyGroup = g;
  895. }
  896. [g_server addRoom:_room isPublic:YES isNeedVerify:_room.isNeedVerify category:category toView:self];
  897. _chatRoom.delegate = nil;
  898. } else {
  899. [g_server addRoom:room isPublic:YES isNeedVerify:NO category:0 toView:self];
  900. chatRoom.delegate = nil;
  901. }
  902. }
  903. -(void)insertRoom{
  904. if (_isPlusButtonComming) {
  905. JXUserObject* user = [[JXUserObject alloc]init];
  906. user.userNickname = _room.name;
  907. user.userId = _room.roomJid;
  908. user.userDescription = _room.desc;
  909. user.roomId = _room.roomId;
  910. user.content = Localized(@"JX_WelcomeGroupChat");
  911. user.showRead = [NSNumber numberWithBool:_room.showRead];
  912. user.showMember = [NSNumber numberWithBool:_room.showMember];
  913. user.allowSendCard = [NSNumber numberWithBool:_room.allowSendCard];
  914. user.allowInviteFriend = [NSNumber numberWithBool:_room.allowInviteFriend];
  915. user.allowUploadFile = [NSNumber numberWithBool:_room.allowUploadFile];
  916. user.allowSpeakCourse = [NSNumber numberWithBool:_room.allowSpeakCourse];
  917. user.isNeedVerify = [NSNumber numberWithBool:_room.isNeedVerify];
  918. user.createUserId = [NSString stringWithFormat:@"%ld",_room.userId];
  919. user.category = [NSNumber numberWithInteger:510];
  920. #ifdef IS_MsgEncrypt
  921. user.chatKeyGroup = [g_msgUtil encryptRoomMsgKey:_room.roomId randomKey:_room.chatKeyGroup];
  922. #endif
  923. [user insertRoom];
  924. } else {
  925. JXUserObject* user = [[JXUserObject alloc]init];
  926. user.userNickname = room.name;
  927. user.userId = room.roomJid;
  928. user.userDescription = room.desc;
  929. user.roomId = room.roomId;
  930. user.content = Localized(@"JX_WelcomeGroupChat");
  931. user.showRead = [NSNumber numberWithBool:room.showRead];
  932. user.showMember = [NSNumber numberWithBool:room.showMember];
  933. user.allowSendCard = [NSNumber numberWithBool:room.allowSendCard];
  934. user.chatRecordTimeOut = room.chatRecordTimeOut;
  935. user.talkTime = [NSNumber numberWithLong:room.talkTime];
  936. user.allowInviteFriend = [NSNumber numberWithBool:room.allowInviteFriend];
  937. user.allowUploadFile = [NSNumber numberWithBool:room.allowUploadFile];
  938. user.allowConference = [NSNumber numberWithBool:room.allowConference];
  939. user.allowSpeakCourse = [NSNumber numberWithBool:room.allowSpeakCourse];
  940. user.isNeedVerify = [NSNumber numberWithBool:room.isNeedVerify];
  941. [user insertRoom];
  942. }
  943. }
  944. -(void)onAdd {
  945. // btn.enabled = NO;
  946. // dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
  947. // btn.enabled = YES;
  948. // });
  949. if(_type == JXSelectFriendTypeSelFriends || chatRoom || self.isForRoom){
  950. if (!self.addressBookArr || self.addressBookArr.count <= 0) {
  951. // [_userIds removeAllObjects];
  952. // [_userNames removeAllObjects];
  953. if (self.isForRoom) {
  954. if (![_userIds containsObject:self.forRoomUser.userId]) {
  955. [_userIds addObject:self.forRoomUser.userId];
  956. [_userNames addObject:self.forRoomUser.userNickname];
  957. }
  958. }
  959. // for(NSNumber* n in set){
  960. //获取选中的好友
  961. // JXUserObject *user;
  962. // if (_seekTextField.text.length > 0) {
  963. // user = _searchArray[[n intValue] % 1000];
  964. // }else{
  965. // user = [[self.letterResultArr objectAtIndex:[n intValue] / 1000] objectAtIndex:[n intValue] % 1000];
  966. // }
  967. // [_userIds addObject:user.userId];
  968. // [_userNames addObject:user.userNickname];
  969. /*
  970. JXMessageObject* m = [[JXMessageObject alloc] init];
  971. m.messageId = [[[XMPPStream generateUUID] stringByReplacingOccurrencesOfString:@"-" withString:@""] lowercaseString];
  972. m.fromUserId = MY_USER_ID;
  973. m.fromUserName = kMY_USER_NICKNAME;
  974. m.toUserId = user.userId;
  975. m.toUserName = user.userNickname;
  976. m.type = [NSNumber numberWithInt:kWCMessageTypeInvite];
  977. m.isRead = [NSNumber numberWithBool:NO];
  978. m.isSend = [NSNumber numberWithBool:NO];
  979. m.timeSend = [NSDate date];
  980. m.content = [room roomDataToNSString];
  981. m.isGroup = 0;
  982. [g_xmpp sendMessageInvite:m];
  983. //xmpp邀请加入房间,取消调用此协议
  984. NSString* to = [NSString stringWithFormat:@"%@@%@",user.userId,g_config.XMPPDomain];
  985. [chatRoom.xmppRoom inviteUser:[XMPPJID jidWithString:to] withMessage:[room roomDataToNSString] msgId:m.messageId];
  986. */
  987. /*邀请协议DEMO:
  988. <message to="3029b12761bb4476bd06f801f51e9f5d@muc.192.168.0.168" id="12348c13c51d0925b4815678" xmlns="jabber:client" from="10005629@192.168.0.168/youjob">
  989. <x xmlns="http://jabber.org/protocol/muc#user">
  990. <invite to="10005598@192.168.0.168"><reason>{"desc":"","id":"59858c13c51d0925b481ce1a","jid":"3029b12761bb4476bd06f801f51e9f5d","name":"陈叔叔","timeSend":1501925454,"userId":"10005629"}</reason></invite>
  991. </x></message>
  992. */
  993. // user = nil;
  994. // }
  995. }
  996. if(self.isForRoom){
  997. NSString* s = [NSUUID UUID].UUIDString;
  998. s = [[s stringByReplacingOccurrencesOfString:@"-" withString:@""] lowercaseString];
  999. NSString *roomName = [NSString stringWithFormat:@"%@、%@",MY_USER_NAME,[_userNames componentsJoinedByString:@"、"]];
  1000. room.roomJid= s;
  1001. room.name = roomName;
  1002. room.desc = nil;
  1003. room.userId = [g_myself.userId longLongValue];
  1004. room.userNickName = MY_USER_NAME;
  1005. room.showRead = NO;
  1006. room.showMember = YES;
  1007. room.allowSendCard = YES;
  1008. room.isLook = YES;
  1009. room.isNeedVerify = NO;
  1010. room.allowInviteFriend = YES;
  1011. room.allowUploadFile = YES;
  1012. room.allowConference = YES;
  1013. room.allowSpeakCourse = YES;
  1014. [g_server addRoom:room isPublic:YES isNeedVerify:NO category:0 toView:self];
  1015. // chatRoom = [[JXXMPP sharedInstance].roomPool createRoom:s title:roomName];
  1016. // chatRoom.delegate = self;
  1017. [_wait start:Localized(@"JXAlert_CreatRoomIng") delay:30];
  1018. return;
  1019. }
  1020. if ((self.room.isNeedVerify && self.room.userId != [g_myself.userId longLongValue]) || _type == JXSelectFriendTypeSelFriends) {
  1021. if (self.isShowAlert) {
  1022. UIAlertView *alert = [[UIAlertView alloc] initWithTitle:Localized(@"JX_SaveLabelNextTime") message:nil delegate:self cancelButtonTitle:Localized(@"JX_DepositAsLabel") otherButtonTitles:Localized(@"JX_Ignore"), nil];
  1023. alert.tag = 2457;
  1024. [alert show];
  1025. return;
  1026. }
  1027. if(self.delegate != nil && [self.delegate respondsToSelector:self.didSelect])
  1028. [self.delegate performSelectorOnMainThread:self.didSelect withObject:self waitUntilDone:YES];
  1029. [self actionQuit];
  1030. }else {
  1031. [g_server addRoomMember:room.roomId userArray:_userIds toView:self];//用接口即可
  1032. }
  1033. if(isNewRoom){
  1034. [self onNewRoom];
  1035. [self actionQuit];
  1036. }
  1037. return;
  1038. }
  1039. if (_type == JXSelectFriendTypeGroupAT)
  1040. return;
  1041. if (_type == JXSelectFriendTypeSpecifyAdmin)
  1042. return;
  1043. if (_type == JXSelectFriendTypeSelMembers){
  1044. }
  1045. if(self.delegate != nil && [self.delegate respondsToSelector:self.didSelect])
  1046. [self.delegate performSelectorOnMainThread:self.didSelect withObject:self waitUntilDone:YES];
  1047. [self actionQuit];
  1048. }
  1049. - (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
  1050. if (alertView.tag == 2457) {
  1051. if (buttonIndex == 0) {
  1052. if ([self.delegate respondsToSelector:self.alertAction]) {
  1053. [self.delegate performSelectorOnMainThread:self.alertAction withObject:self waitUntilDone:YES];
  1054. }
  1055. }else {
  1056. if(self.delegate != nil && [self.delegate respondsToSelector:self.didSelect])
  1057. [self.delegate performSelectorOnMainThread:self.didSelect withObject:self waitUntilDone:YES];
  1058. [self actionQuit];
  1059. }
  1060. }
  1061. }
  1062. //-(void)xmppRoomDidCreate{
  1063. // [g_server addRoom:room isPublic:YES isNeedVerify:NO category:0 toView:self];
  1064. // chatRoom.delegate = nil;
  1065. //}
  1066. -(void)onNewRoom{
  1067. JXChatViewC *sendView=[JXChatViewC alloc];
  1068. sendView.title = chatRoom.roomTitle;
  1069. sendView.roomJid = chatRoom.roomJid;
  1070. sendView.roomId = room.roomId;
  1071. sendView.chatRoom = chatRoom;
  1072. sendView.room = self.room;
  1073. JXUserObject * user = [[JXUserObject alloc]init];
  1074. user = [user getUserById:chatRoom.roomJid];
  1075. sendView.chatPerson = user;
  1076. sendView = [sendView init];
  1077. // [g_App.window addSubview:sendView.view];
  1078. [g_navigation pushViewController:sendView animated:YES];
  1079. }
  1080. -(NSString *)positionStrRole:(NSInteger)role{
  1081. if (_type == JXSelectFriendTypeSpecifyAdmin) {
  1082. NSString * roleStr = nil;
  1083. switch (role) {
  1084. case 1://创建者
  1085. roleStr = Localized(@"JXGroup_Owner");
  1086. break;
  1087. case 2://管理员
  1088. roleStr = Localized(@"JXGroup_Admin");
  1089. break;
  1090. case 3://普通成员
  1091. roleStr = Localized(@"JXGroup_RoleNormal");
  1092. break;
  1093. default:
  1094. roleStr = Localized(@"JXGroup_RoleNormal");
  1095. break;
  1096. }
  1097. return roleStr;
  1098. }
  1099. return nil;
  1100. }
  1101. -(void)onSendTimeout:(NSNotification *)notifacation//超时未收到回执
  1102. {
  1103. // [_wait stop];
  1104. // JXMessageObject *msg = (JXMessageObject *)notifacation.object;
  1105. // if([msg.type intValue] == kWCMessageTypeInvite)
  1106. // [g_App showAlert:[NSString stringWithFormat:@"邀请:%@失败,请重新邀请",msg.toUserName]];
  1107. }
  1108. -(void)newReceipt:(NSNotification *)notifacation{//新回执
  1109. // [_wait stop];
  1110. // JXMessageObject *msg = (JXMessageObject *)notifacation.object;
  1111. // if([msg.type intValue] == kWCMessageTypeInvite)
  1112. // [g_server addRoomMember:room.roomId userId:msg.toUserId nickName:msg.toUserName toView:self];
  1113. }
  1114. -(void) didServerResultSucces:(JXConnection*)aDownload dict:(NSDictionary*)dict array:(NSArray*)array1{
  1115. [_wait stop];
  1116. if( [aDownload.action isEqualToString:act_roomMemberSet] ){
  1117. for (int i=0;i<[_userIds count];i++) {
  1118. NSString *userId=[_userIds objectAtIndex:i];
  1119. memberData* p = [[memberData alloc] init];
  1120. p.userId = [userId intValue];
  1121. p.userNickName = [_userNames objectAtIndex:i];
  1122. p.role = [NSNumber numberWithInt:3];
  1123. [room.members addObject:p];
  1124. }
  1125. if(self.delegate != nil && [self.delegate respondsToSelector:self.didSelect])
  1126. [self.delegate performSelectorOnMainThread:self.didSelect withObject:self waitUntilDone:YES];
  1127. [_userIds removeAllObjects];
  1128. [_userNames removeAllObjects];
  1129. [self actionQuit];
  1130. // _pSelf = nil;
  1131. }
  1132. if( [aDownload.action isEqualToString:act_roomAdd] ){
  1133. if (_isPlusButtonComming) {
  1134. _chatRoom = [[JXXMPP sharedInstance].roomPool createRoom:_room.roomJid title:_room.name];
  1135. _chatRoom.delegate = self;
  1136. _room.roomId = [dict objectForKey:@"id"];
  1137. [self insertRoom];
  1138. memberData *member = [[memberData alloc] init];
  1139. member.userId = [g_myself.userId longLongValue];
  1140. member.userNickName = MY_USER_NAME;
  1141. member.role = @1;
  1142. [_room.members addObject:member];
  1143. self.chatRoom = _chatRoom;
  1144. self.room = _room;
  1145. self.isNewRoom = YES;
  1146. self.maxSize = [[dict objectForKey:@"maxUserSize"] intValue] - 1;
  1147. [self onAdd];
  1148. } else {
  1149. room.roomId = [dict objectForKey:@"id"];
  1150. // _room.call = [NSString stringWithFormat:@"%@",[dict objectForKey:@"call"]];
  1151. chatRoom = [[JXXMPP sharedInstance].roomPool createRoom:room.roomJid title:room.name];
  1152. chatRoom.delegate = self;
  1153. [self insertRoom];
  1154. [g_notify postNotificationName:kUpdateUserNotifaction object:nil];
  1155. [g_notify postNotificationName:kActionRelayQuitVC object:nil];
  1156. // [g_server addRoomMember:room.roomId userArray:_userIds toView:self];//用接口即可
  1157. if(isNewRoom){
  1158. [self onNewRoom];
  1159. }
  1160. int maxUser = [[dict objectForKey:@"maxUserSize"] intValue];
  1161. if (_userIds.count > maxUser) {
  1162. [JXMyTools showTipView:@"群成员超过上限"];
  1163. [_userIds removeAllObjects];
  1164. [_userNames removeAllObjects];
  1165. [self actionQuit];
  1166. }else {
  1167. [g_server addRoomMember:room.roomId userArray:_userIds toView:self];//用接口即可
  1168. }
  1169. }
  1170. }
  1171. // if( [aDownload.action isEqualToString:act_roomAdd] ){
  1172. // room.roomId = [dict objectForKey:@"id"];
  1173. // // _room.call = [NSString stringWithFormat:@"%@",[dict objectForKey:@"call"]];
  1174. // chatRoom = [[JXXMPP sharedInstance].roomPool createRoom:room.roomJid title:room.name];
  1175. // chatRoom.delegate = self;
  1176. // [self insertRoom];
  1177. // [g_notify postNotificationName:kUpdateUserNotifaction object:nil];
  1178. // [g_notify postNotificationName:kActionRelayQuitVC object:nil];
  1179. //// [g_server addRoomMember:room.roomId userArray:_userIds toView:self];//用接口即可
  1180. // if(isNewRoom){
  1181. // [self onNewRoom];
  1182. // }
  1183. //
  1184. // int maxUser = [[dict objectForKey:@"maxUserSize"] intValue];
  1185. // if (_userIds.count > maxUser) {
  1186. // [JXMyTools showTipView:@"群成员超过上限"];
  1187. // [_userIds removeAllObjects];
  1188. // [_userNames removeAllObjects];
  1189. // [self actionQuit];
  1190. // }else {
  1191. //
  1192. // [g_server addRoomMember:room.roomId userArray:_userIds toView:self];//用接口即可
  1193. // }
  1194. //
  1195. // }
  1196. }
  1197. //-(void)insertRoom{
  1198. // JXUserObject* user = [[JXUserObject alloc]init];
  1199. // user.userNickname = room.name;
  1200. // user.userId = room.roomJid;
  1201. // user.userDescription = room.desc;
  1202. // user.roomId = room.roomId;
  1203. // user.content = Localized(@"JX_WelcomeGroupChat");
  1204. // user.showRead = [NSNumber numberWithBool:room.showRead];
  1205. // user.showMember = [NSNumber numberWithBool:room.showMember];
  1206. // user.allowSendCard = [NSNumber numberWithBool:room.allowSendCard];
  1207. // user.chatRecordTimeOut = room.chatRecordTimeOut;
  1208. // user.talkTime = [NSNumber numberWithLong:room.talkTime];
  1209. // user.allowInviteFriend = [NSNumber numberWithBool:room.allowInviteFriend];
  1210. // user.allowUploadFile = [NSNumber numberWithBool:room.allowUploadFile];
  1211. // user.allowConference = [NSNumber numberWithBool:room.allowConference];
  1212. // user.allowSpeakCourse = [NSNumber numberWithBool:room.allowSpeakCourse];
  1213. // user.isNeedVerify = [NSNumber numberWithBool:room.isNeedVerify];
  1214. // [user insertRoom];
  1215. //}
  1216. -(int) didServerResultFailed:(JXConnection*)aDownload dict:(NSDictionary*)dict{
  1217. [_wait stop];
  1218. return show_error;
  1219. }
  1220. -(int) didServerConnectError:(JXConnection*)aDownload error:(NSError *)error{//error为空时,代表超时
  1221. [_wait stop];
  1222. return show_error;
  1223. }
  1224. -(void) didServerConnectStart:(JXConnection*)aDownload{
  1225. [_wait start];
  1226. }
  1227. - (void)actionQuit {
  1228. if (self.isAddWindow) {
  1229. [self.view removeFromSuperview];
  1230. self.view = nil;
  1231. }else{
  1232. [super actionQuit];
  1233. }
  1234. }
  1235. @end