JXXMMainVc.m 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513
  1. //
  2. // JXMainViewController.m
  3. //
  4. // Created by flyeagleTang on 14-4-3.
  5. // Copyright (c) 2014年 Reese. All rights reserved.
  6. //
  7. #import "JXXMMainVc.h"
  8. #import "JXTabMenuView.h"
  9. #import "JXMsgViewController.h"
  10. #import "JXFriendViewController.h"
  11. #import "AppDelegate.h"
  12. #import "JXNewFriendViewController.h"
  13. #import "JXFriendObject.h"
  14. #import "PSMyViewController.h"
  15. #ifdef Live_Version
  16. #import "JXLiveViewController.h"
  17. #endif
  18. #import "WeiboViewControlle.h"
  19. #import "JXSquareViewController.h"
  20. #import "JXProgressVC.h"
  21. #import "JXGroupViewController.h"
  22. #import "OrganizTreeViewController.h"
  23. #import "JXLabelObject.h"
  24. #import "JXBlogRemind.h"
  25. #import "JXRoomPool.h"
  26. #import "JXDeviceAuthController.h"
  27. #import "CYWebAddPointVC.h"
  28. #import "CYWebBettingVC.h"
  29. #import "gifViewController.h"
  30. #import "UIView+LK.h"
  31. #import "JXLinksShareVC.h"
  32. @interface JXXMMainVc()
  33. @property (nonatomic, strong) JXLinksShareVC *linksShareVC;
  34. @property (nonatomic, assign) BOOL isFloatWindow;
  35. @property (nonatomic, strong) UIButton *suspensionBtn;
  36. @property (nonatomic, assign) CGRect subWindowFrame;
  37. @property (nonatomic,strong) XMGOpenGLNavVc *nav1;
  38. @property (nonatomic,strong) XMGOpenGLNavVc *nav2;
  39. @property (nonatomic,strong) XMGOpenGLNavVc *nav3;
  40. @property (nonatomic,strong) XMGOpenGLNavVc *nav4;
  41. @end
  42. @implementation JXXMMainVc{
  43. NSString * _linkName1;
  44. NSString * _linkName2;
  45. NSString * _linkURL1;
  46. NSString * _linkURL2;
  47. NSString * _imgUrl1;
  48. NSString * _imgUrl2;
  49. }
  50. @synthesize tb=_tb;
  51. @synthesize btn=_btn,mainView=_mainView;
  52. @synthesize IS_HR_MODE;
  53. - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
  54. {
  55. self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
  56. if (self) {
  57. self.view.frame=CGRectMake(0, 0, JX_SCREEN_WIDTH, JX_SCREEN_HEIGHT-JX_SCREEN_TOP-70-JX_SCREEN_HEIGHT>=812?64:49);
  58. _bottomView = [[UIImageView alloc] init];
  59. _bottomView.userInteractionEnabled = YES;
  60. _bottomView.backgroundColor = HEXCOLOR(0xF1F1F1);
  61. _bottomView.backgroundColor=[UIColor greenColor];
  62. [self.view addSubview:_bottomView];
  63. [_bottomView mas_makeConstraints:^(MASConstraintMaker *make) {
  64. make.bottom.mas_equalTo(0);
  65. make.left.and.right.mas_equalTo(0);
  66. make.height.mas_equalTo(JX_SCREEN_BOTTOM);
  67. }];
  68. _mainView = [[UIView alloc] init];
  69. _mainView.backgroundColor=[UIColor yellowColor];
  70. [self.view addSubview:_mainView];
  71. [_mainView mas_makeConstraints:^(MASConstraintMaker *make) {
  72. make.top.mas_equalTo(0);
  73. make.left.and.right.mas_equalTo(0);
  74. make.bottom.mas_equalTo(JX_SCREEN_BOTTOM);
  75. }];
  76. [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(closeBtn:) name:@"hidddenBottomView" object:nil];
  77. [self buildTop];
  78. _msgVc = [[JXMsgViewController alloc] init];
  79. _nav1 = [[XMGOpenGLNavVc alloc] initWithRootViewController:_msgVc];
  80. _nav1.navigationBar.hidden=YES;
  81. _gifVc = [[JXWellBeingVc alloc] init];
  82. _nav2 = [[XMGOpenGLNavVc alloc] initWithRootViewController:_gifVc];
  83. _psMyviewVC = [[JXXMGMyVc alloc] init];
  84. _nav3 = [[XMGOpenGLNavVc alloc] initWithRootViewController:_psMyviewVC];
  85. [self doSelected:0];
  86. [g_notify addObserver:self selector:@selector(loginSynchronizeFriends:) name:kXmppClickLoginNotifaction object:nil];
  87. [g_notify addObserver:self selector:@selector(appDidEnterForeground) name:kApplicationWillEnterForeground object:nil];
  88. [g_notify addObserver:self selector:@selector(getUserInfo:) name:kXMPPMessageUpadteUserInfoNotification object:nil];
  89. [g_notify addObserver:self selector:@selector(getRoomSet:) name:kXMPPMessageUpadteGroupNotification object:nil];
  90. [g_notify addObserver:self selector:@selector(onXmppLoginChanged:) name:kXmppLoginNotifaction object:nil];
  91. [g_notify addObserver:self selector:@selector(hasLoginOther:) name:kXMPPLoginOtherNotification object:nil];
  92. [g_notify addObserver:self selector:@selector(showDeviceAuth:) name:kDeviceAuthNotification object:nil];
  93. }
  94. return self;
  95. }
  96. -(void)closeBtn:(NSNotification *)note
  97. {
  98. NSDictionary *dict=note.userInfo;
  99. if ([dict[@"jxmessage"] intValue]==1||[dict[@"my"] intValue]==1||[dict[@"gif"] intValue]==1) {
  100. _bottomView.hidden=YES;
  101. }else{
  102. _bottomView.hidden=YES;
  103. }
  104. }
  105. -(void)backfUI{
  106. _bottomView.hidden=NO;
  107. }
  108. - (void)dissselfUI{
  109. _bottomView.hidden=YES;
  110. return;
  111. }
  112. - (void)viewWillAppear:(BOOL)animated{
  113. [super viewWillAppear:animated];
  114. _bottomView.hidden=NO;
  115. }
  116. - (void)appEnterForegroundNotif:(NSNotification *)noti {
  117. [g_server offlineOperation:(g_server.lastOfflineTime *1000 + g_server.timeDifference)/1000 toView:self];
  118. }
  119. - (void)getUserInfo:(NSNotification *)noti {
  120. JXMessageObject *msg = noti.object;
  121. [g_server getUser:msg.toUserId toView:self];
  122. }
  123. - (void)getRoomSet:(NSNotification *)noti {
  124. JXMessageObject *msg = noti.object;
  125. [g_server getRoom:msg.toUserId toView:self];
  126. }
  127. -(void)dealloc{
  128. // [_psMyviewVC.view release];
  129. // [_msgVc.view release];
  130. [g_notify removeObserver:self name:kXmppLoginNotifaction object:nil];
  131. [g_notify removeObserver:self name:kSystemLoginNotifaction object:nil];
  132. [g_notify removeObserver:self name:kXmppClickLoginNotifaction object:nil];
  133. [g_notify removeObserver:self name:kXMPPLoginOtherNotification object:nil];
  134. [g_notify removeObserver:self name:kApplicationWillEnterForeground object:nil];
  135. [g_notify removeObserver:self name:kXMPPMessageUpadteUserInfoNotification object:nil];
  136. [g_notify removeObserver:self name:kDeviceAuthNotification object:nil];
  137. // [super dealloc];
  138. }
  139. - (void)viewDidLoad
  140. {
  141. [super viewDidLoad];
  142. // Do any additional setup after loading the view.
  143. [self loginSynchronizeFriends:nil];
  144. if (g_server.isManualLogin) {
  145. if (self.isLoadFriendAndGroup) {
  146. NSArray *array = [[JXLabelObject sharedInstance] fetchAllLabelsFromLocal];
  147. if (array.count <= 0) {
  148. // 同步标签
  149. [g_server friendGroupListToView:self];
  150. }
  151. }
  152. }
  153. // 获取服务器时间
  154. //[g_server getCurrentTimeToView:self];
  155. // 获取自己的用户信息
  156. // [g_server getUser:MY_USER_ID toView:self];
  157. }
  158. - (void)appDidEnterForeground {
  159. // 获取服务器时间
  160. [g_server getCurrentTimeToView:self];
  161. }
  162. - (void)loginSynchronizeFriends:(NSNotification*)notification{
  163. //判断服务器好友数量是否与本地一致
  164. // _friendArray = [g_server.myself fetchAllFriendsOrNotFromLocal];
  165. // NSLog(@"%d -------%ld",[g_server.myself.friendCount intValue] , [_friendArray count]);
  166. // if ([g_server.myself.friendCount intValue] > [_friendArray count] && [g_server.myself.friendCount intValue] >0) {
  167. // [g_App showAlert:Localized(@"JXAlert_SynchFirendOK") delegate:self];
  168. if (self.isLoadFriendAndGroup) {
  169. [g_server listAttention:0 userId:MY_USER_ID toView:self];
  170. }else{
  171. [[JXXMPP sharedInstance] performSelector:@selector(login) withObject:nil afterDelay:2];//2秒后执行xmpp登录
  172. }
  173. [[JXXMPP sharedInstance] performSelector:@selector(login) withObject:nil afterDelay:2];//2秒后执行xmpp登录
  174. // }
  175. }
  176. - (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{
  177. if (alertView.tag == 10002) {
  178. [g_server performSelector:@selector(showLogin) withObject:nil afterDelay:0.5];
  179. return;
  180. }else if (buttonIndex == 1) {
  181. [g_server listAttention:0 userId:MY_USER_ID toView:self];
  182. }
  183. }
  184. - (void)didReceiveMemoryWarning
  185. {
  186. [super didReceiveMemoryWarning];
  187. // Dispose of any resources that can be recreated.
  188. }
  189. -(void)buildTop{
  190. _tb = [JXTabMenuView alloc];
  191. NSString *imageSelect1 = _imgUrl1;
  192. if (_imgUrl1.length<1) {
  193. _imgUrl1 = @"find_normal";
  194. imageSelect1 = @"find_press_gray";
  195. }
  196. NSString *imageSelect2 = _imgUrl2;
  197. if (_imgUrl2.length<1) {
  198. _imgUrl2 = @"find_normal";
  199. imageSelect2 = @"find_press_gray";
  200. }
  201. _tb.items = [NSArray arrayWithObjects:@"首页",@"福利",Localized(@"JX_My"),nil];
  202. _tb.imagesNormal = [NSArray arrayWithObjects:@"news_normal",@"fucaizhongxin",@"me_normal",nil];
  203. _tb.imagesSelect = [NSArray arrayWithObjects:@"news_press_gray",@"fucaizhongxin",@"me_press_gray",nil];
  204. _tb.delegate = self;
  205. _tb.onDragout = @selector(onDragout:);
  206. [_tb setBackgroundImageName:@"MessageListCellBkg"];
  207. _tb.onClick = @selector(actionSegment:);
  208. _tb = [_tb initWithFrame:CGRectMake(0, 0, JX_SCREEN_WIDTH, JX_SCREEN_BOTTOM)];
  209. [_bottomView addSubview:_tb];
  210. NSMutableArray *remindArray = [[JXBlogRemind sharedInstance] doFetchUnread];
  211. [_tb setBadge:2 title:[NSString stringWithFormat:@"%ld",remindArray.count]];
  212. }
  213. - (void)onDragout:(id)aa{}
  214. -(void)actionSegment:(UIButton*)sender{
  215. [self doSelected:(int)sender.tag];
  216. }
  217. -(void)doSelected:(int)n{
  218. [_selectVC.view removeFromSuperview];
  219. switch (n){
  220. case 0:
  221. {
  222. _selectVC = _nav1;
  223. }
  224. break;
  225. case 1:
  226. { _selectVC = _nav2;
  227. }
  228. break;
  229. case 2:
  230. { _selectVC = _nav3;
  231. }
  232. break;
  233. }
  234. if (n==0) {
  235. //[self dissselfUI];
  236. // _topView.hidden=NO;
  237. }else{
  238. // _topView.hidden=YES;
  239. }
  240. [_tb selectOne:n];
  241. [_mainView addSubview:_selectVC.view];
  242. }
  243. - (UIStatusBarStyle)preferredStatusBarStyle {
  244. return UIStatusBarStyleDefault;
  245. }
  246. - (void)titleClick:(UIButton *)button
  247. {
  248. // [_selectVC.view removeFromSuperview];
  249. // _selectVC = _psMyviewVC;
  250. // [_tb selectOne:3];
  251. // [_mainView addSubview:_selectVC.view];
  252. //
  253. }
  254. -(void)onXmppLoginChanged:(NSNumber*)isLogin{
  255. if([JXXMPP sharedInstance].isLogined == login_status_yes){
  256. // 获取离线调用接口列表
  257. [g_server offlineOperation:(g_server.lastOfflineTime *1000 + g_server.timeDifference)/1000 toView:self];
  258. [self onAfterLogin];
  259. }
  260. switch (_tb.selected){
  261. case 0:
  262. _btn.hidden = [JXXMPP sharedInstance].isLogined;
  263. break;
  264. case 1:
  265. _btn.hidden = ![JXXMPP sharedInstance].isLogined;
  266. break;
  267. case 2:
  268. _btn.hidden = NO;
  269. break;
  270. case 3:
  271. _btn.hidden = ![JXXMPP sharedInstance].isLogined;
  272. break;
  273. }
  274. }
  275. -(void)onAfterLogin{
  276. // [_msgVc scrollToPageUp];
  277. }
  278. -(void)hasLoginOther:(NSNotification *)notifcation{
  279. [g_App showAlert:Localized(@"JXXMPP_Other") delegate:self tag:10002 onlyConfirm:YES];
  280. }
  281. - (void)showDeviceAuth:(NSNotification *)notification{
  282. JXMessageObject *msg = notification.object;
  283. JXDeviceAuthController *authCon = [[JXDeviceAuthController alloc] initWithMsg:msg];
  284. // [self presentViewController:authCon animated:YES completion:nil];
  285. UIViewController *lastVC = (UIViewController *)g_navigation.subViews.lastObject;
  286. [lastVC presentViewController:authCon animated:YES completion:nil];
  287. }
  288. -(void) didServerResultSucces:(JXConnection*)aDownload dict:(NSDictionary*)dict array:(NSArray*)array1{
  289. //更新本地好友
  290. return;
  291. if ([aDownload.action isEqualToString:act_AttentionList]) {
  292. JXProgressVC * pv = [JXProgressVC alloc];
  293. pv.dbFriends = (long)[_friendArray count];
  294. pv.dataArray = array1;
  295. pv = [pv init];
  296. if (array1.count > 300) {
  297. [g_navigation pushViewController:pv animated:YES];
  298. }
  299. // [self.view addSubview:pv.view];
  300. }
  301. // 同步标签
  302. if ([aDownload.action isEqualToString:act_FriendGroupList]) {
  303. for (NSInteger i = 0; i < array1.count; i ++) {
  304. NSDictionary *dict = array1[i];
  305. JXLabelObject *labelObj = [[JXLabelObject alloc] init];
  306. labelObj.groupId = dict[@"groupId"];
  307. labelObj.groupName = dict[@"groupName"];
  308. labelObj.userId = dict[@"userId"];
  309. NSArray *userIdList = dict[@"userIdList"];
  310. NSString *userIdListStr = [userIdList componentsJoinedByString:@","];
  311. if (userIdListStr.length > 0) {
  312. labelObj.userIdList = [NSString stringWithFormat:@"%@", userIdListStr];
  313. }
  314. [labelObj insert];
  315. }
  316. // 删除服务器上已经删除的
  317. NSArray *arr = [[JXLabelObject sharedInstance] fetchAllLabelsFromLocal];
  318. for (NSInteger i = 0; i < arr.count; i ++) {
  319. JXLabelObject *locLabel = arr[i];
  320. BOOL flag = NO;
  321. for (NSInteger j = 0; j < array1.count; j ++) {
  322. NSDictionary * dict = array1[j];
  323. if ([locLabel.groupId isEqualToString:dict[@"groupId"]]) {
  324. flag = YES;
  325. break;
  326. }
  327. }
  328. if (!flag) {
  329. [locLabel delete];
  330. }
  331. }
  332. }
  333. if ([aDownload.action isEqualToString:act_offlineOperation]) {
  334. for (NSDictionary *dict in array1) {
  335. if ([[dict objectForKey:@"tag"] isEqualToString:@"label"]) {
  336. [g_notify postNotificationName:kOfflineOperationUpdateLabelList object:nil];
  337. }
  338. else if ([[dict objectForKey:@"tag"] isEqualToString:@"friend"]) {
  339. [g_server getUser:[dict objectForKey:@"friendId"] toView:self];
  340. }
  341. else if ([[dict objectForKey:@"tag"] isEqualToString:@"room"]) {
  342. [g_server getRoom:[dict objectForKey:@"friendId"] toView:self];
  343. }
  344. }
  345. }
  346. if ([aDownload.action isEqualToString:act_UserGet]) {
  347. JXUserObject *user = [[JXUserObject alloc] init];
  348. [user getDataFromDict:dict];
  349. if ([user.userId intValue] == [MY_USER_ID intValue]) {
  350. [g_server doSaveUser:dict];
  351. user.bubbleFontId = [dict objectForKey:@"bubbleFontId"];
  352. user.gradeIndex = [dict objectForKey:@"gradeIndex"];
  353. // 保存自己
  354. [user insert];
  355. [user update];
  356. }else {
  357. JXUserObject *user1 = [[JXUserObject sharedInstance] getUserById:user.userId];
  358. user.content = user1.content;
  359. user.timeSend = user1.timeSend;
  360. [user update];
  361. }
  362. [g_notify postNotificationName:kOfflineOperationUpdateUserSet object:user];
  363. }
  364. if ([aDownload.action isEqualToString:act_roomGet]) {
  365. JXUserObject *user = [[JXUserObject alloc] init];
  366. [user getDataFromDict:dict];
  367. user.userId = [dict objectForKey:@"jid"];
  368. user.roomId = [dict objectForKey:@"id"];
  369. user.userNickname = [dict objectForKey:@"name"];
  370. if(![g_xmpp.roomPool getRoom:user.userId] || ![user haveTheUser]){
  371. user.userDescription = [dict objectForKey:@"desc"];
  372. user.showRead = [dict objectForKey:@"showRead"];
  373. user.showMember = [dict objectForKey:@"showMember"];
  374. user.allowSendCard = [dict objectForKey:@"allowSendCard"];
  375. user.chatRecordTimeOut = [dict objectForKey:@"chatRecordTimeOut"];
  376. user.talkTime = [dict objectForKey:@"talkTime"];
  377. user.allowInviteFriend = [dict objectForKey:@"allowInviteFriend"];
  378. user.allowUploadFile = [dict objectForKey:@"allowUploadFile"];
  379. user.allowConference = [dict objectForKey:@"allowConference"];
  380. user.allowSpeakCourse = [dict objectForKey:@"allowSpeakCourse"];
  381. user.offlineNoPushMsg = [(NSDictionary *)[dict objectForKey:@"member"] objectForKey:@"offlineNoPushMsg"];
  382. user.isNeedVerify = [dict objectForKey:@"isNeedVerify"];
  383. user.createUserId = [dict objectForKey:@"userId"];
  384. user.content = @" ";
  385. user.topTime = nil;
  386. [user insertRoom];
  387. [g_xmpp.roomPool joinRoom:user.userId title:user.userNickname lastDate:nil isNew:NO];
  388. }else {
  389. NSDictionary * groupDict = [user toDictionary];
  390. roomData * roomdata = [[roomData alloc] init];
  391. [roomdata getDataFromDict:groupDict];
  392. [roomdata getDataFromDict:dict];
  393. JXUserObject *user1 = [[JXUserObject sharedInstance] getUserById:roomdata.roomJid];
  394. user.content = user1.content;
  395. user.status = user1.status;
  396. user.offlineNoPushMsg = [NSNumber numberWithBool:roomdata.offlineNoPushMsg];
  397. user.msgsNew = user1.msgsNew;
  398. [user update];
  399. }
  400. [g_notify postNotificationName:kOfflineOperationUpdateUserSet object:user];
  401. }
  402. }
  403. -(int) didServerResultFailed:(JXConnection*)aDownload dict:(NSDictionary*)dict{
  404. return hide_error;
  405. }
  406. -(int) didServerConnectError:(JXConnection*)aDownload error:(NSError *)error{//error为空时,代表超时
  407. return hide_error;
  408. }
  409. @end