PageRenderTime 50ms CodeModel.GetById 18ms RepoModel.GetById 0ms app.codeStats 0ms

/WHAMBUSH/wbRootViewController.m

https://gitlab.com/urbanjunglestudio/whambush-ios
Objective C | 709 lines | 564 code | 118 blank | 27 comment | 101 complexity | 182330396cb347bfbabac2069869c36b MD5 | raw file
  1. //
  2. // wbRootViewController.m
  3. // WHAMBUSH
  4. //
  5. // Created by Jari Kalinainen on 9/28/13.
  6. // Copyright (c) 2013 Jari Kalinainen. All rights reserved.
  7. //
  8. #import "wbRootViewController.h"
  9. @interface wbRootViewController ()
  10. @end
  11. @implementation wbRootViewController
  12. @synthesize defaultTvChannel;
  13. @synthesize missionController;
  14. - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
  15. {
  16. self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
  17. if (self) {
  18. // Custom initialization
  19. [[wbAPI sharedAPI] setRootViewController:self];
  20. [self setEdgesForExtendedLayout:UIRectEdgeNone];
  21. tvHomeIndex = 0;
  22. }
  23. DPRINTCLASS;
  24. return self;
  25. }
  26. - (void)viewDidLoad
  27. {
  28. kSHOWWAIT
  29. DMSG;
  30. [super viewDidLoad];
  31. [self.view setBackgroundColor:kTRANSPARENTUICOLOR];
  32. //[[wbAPI sharedAPI] setRootViewController:self];
  33. //[self initViewControllers];
  34. viewStack = homeViewStack;
  35. UIView *rootView = [[UIView alloc] initWithFrame:[[wbAPI sharedAPI] portraitFrame]];
  36. [rootView setBackgroundColor:kBKGUICOLOR];
  37. [self setView:rootView];
  38. }
  39. -(void)viewDidAppear:(BOOL)animated
  40. {
  41. [[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationNone];
  42. [self setNeedsStatusBarAppearanceUpdate];
  43. //kHIDEWAIT
  44. [super viewDidAppear:animated];
  45. DMSG;
  46. if (containerView == nil) {
  47. containerView = [[UIView alloc] initWithFrame:CGRectMake(0,/*[[wbAPI sharedAPI] headerBarHeight]+1*/0, [[wbAPI sharedAPI] portraitFrame].size.width,[[wbAPI sharedAPI] portraitFrame].size.height-(/*[[wbAPI sharedAPI] headerBarHeight]+*/[[wbAPI sharedAPI] footerBarHeight]-1))];
  48. [containerView setBackgroundColor:kTRANSPARENTUICOLOR];
  49. [self.view addSubview:containerView];
  50. //[self.view addSubview:[wbHeader sharedHeader]];
  51. [self.view addSubview:[wbFooter sharedFooter]];
  52. }
  53. [self.view addSubview:[wbHeader sharedHeader]];
  54. [self.view bringSubviewToFront:[wbHeader sharedHeader]];
  55. if ([viewStack count] > 1) {
  56. [[wbHeader sharedHeader] setHeaderBackButton:YES];
  57. }
  58. [[NSNotificationCenter defaultCenter] addObserver:self
  59. selector:@selector(scrollToTop:)
  60. name:@"StatusBarTappedNotification"
  61. object:nil];
  62. }
  63. -(void)viewDidDisappear:(BOOL)animated {
  64. [super viewDidDisappear:animated];
  65. [[NSNotificationCenter defaultCenter] removeObserver:self name:@"StatusBarTappedNotification" object:nil];
  66. }
  67. -(void)launchFromPush //or URl
  68. {
  69. DCMSG(@"Here I am");
  70. DCMSG([[wbData sharedData] pushData]);
  71. NSDictionary *dictionary = [[wbData sharedData] pushData];
  72. DCMSG(dictionary);
  73. if ([dictionary objectForKey:@"id"] == nil) { // url
  74. if ([dictionary objectForKey:@"video"] != nil) {
  75. NSString *endpoint = [NSString stringWithFormat:kVIDEOSLUGAPI,[dictionary objectForKey:@"video"]];
  76. [[wbAPI sharedAPI] getJSONWithURL:[[wbAPI sharedAPI] urlWithEndpoint:endpoint] response:^(id data){
  77. DCMSG(data);
  78. [[wbData sharedData] setSingleVideoData:data];
  79. [kROOTVC performSelectorOnMainThread:@selector(startSingleVideo:) withObject:nil waitUntilDone:NO];
  80. }];
  81. } else if ([dictionary objectForKey:@"user"] != nil) {
  82. wbUser *user = [[wbData sharedData] getWhambushUserWithUsername:[dictionary objectForKey:@"user"]];
  83. if (user != nil) {
  84. DCMSG(user);
  85. [kROOTVC performSelectorOnMainThread:@selector(startUserPage:) withObject:user waitUntilDone:NO];
  86. }
  87. } else if ([dictionary objectForKey:@"mission"] != nil) {
  88. //
  89. wbMission *mission = [[wbMission alloc] initWithSlug:[dictionary objectForKey:@"mission"]];
  90. [kROOTVC performSelectorOnMainThread:@selector(startSingleMission:) withObject:mission waitUntilDone:NO];
  91. }
  92. } else { // push notification
  93. if ([[dictionary valueForKey:@"video"] integerValue] > 0) {
  94. NSString *endpoint = [NSString stringWithFormat:@"%@%ld/",kVIDEOAPI,(long)[[dictionary valueForKey:@"video"] integerValue]];
  95. [[wbAPI sharedAPI] getJSONWithURL:[[wbAPI sharedAPI] urlWithEndpoint:endpoint] response:^(id data){
  96. DCMSG(data);
  97. [[wbData sharedData] setSingleVideoData:data];
  98. [kROOTVC performSelectorOnMainThread:@selector(startSingleVideo:) withObject:nil waitUntilDone:NO];
  99. }];
  100. } else if ([[dictionary valueForKey:@"user"] integerValue] > 0) {
  101. wbUser *user = [[wbData sharedData] getWhambushUserWithId:[[dictionary valueForKey:@"user"] integerValue]];
  102. if (user != nil) {
  103. DCMSG(user);
  104. [kROOTVC performSelectorOnMainThread:@selector(startUserPage:) withObject:user waitUntilDone:NO];
  105. }
  106. } else if ([[dictionary valueForKey:@"mission"] integerValue] > 0) {
  107. // mission
  108. wbMission *mission = [[wbData sharedData] getMissionWithId:[NSNumber numberWithInteger:[[dictionary valueForKey:@"mission"] integerValue]]];
  109. [kROOTVC performSelectorOnMainThread:@selector(startSingleMission:) withObject:mission waitUntilDone:NO];
  110. }
  111. }
  112. [[wbData sharedData] setLaunchedFromPush:NO];
  113. }
  114. -(void)scrollToTop:(id)sender
  115. {
  116. if ([[[viewStack lastObject] view] respondsToSelector:@selector(scrollTableTop)]) {
  117. [[[viewStack lastObject] view] performSelector:@selector(scrollTableTop)];
  118. } else {
  119. if ([[[[[viewStack lastObject] view] subviews] firstObject] respondsToSelector:@selector(scrollTableTop)]) {
  120. [[[[[viewStack lastObject] view] subviews] firstObject] performSelector:@selector(scrollTableTop)];
  121. }
  122. }
  123. }
  124. -(void)loginOK
  125. {
  126. DNSLog(@"Logged");
  127. [[wbData sharedData] clearUserData];
  128. if (videoFeedController == nil) {
  129. //[self startVideoFeed:self];
  130. [self initViewControllers];
  131. [self changeViewStack:@"mission"];
  132. } else {
  133. [userViewController setUser:[wbUser sharedUser]];
  134. if ([[[viewStack lastObject] view] respondsToSelector:@selector(forceRefresh)]) {
  135. [[[viewStack lastObject] view] performSelector:@selector(forceRefresh)];
  136. }
  137. if ([videoFeedController.view respondsToSelector:@selector(forceRefresh)]) {
  138. [videoFeedController.view performSelector:@selector(forceRefresh)];
  139. }
  140. if ([missionController.view respondsToSelector:@selector(forceRefresh)]) {
  141. [missionController.view performSelector:@selector(forceRefresh)];
  142. }
  143. if ([[missionController countrySelect].view respondsToSelector:@selector(forceRefresh)]) {
  144. [[missionController countrySelect].view performSelector:@selector(forceRefresh)];
  145. }
  146. if ([tvChannelsController.view respondsToSelector:@selector(forceRefresh)]) {
  147. [tvChannelsController.view performSelector:@selector(forceRefresh)];
  148. }
  149. if ([[[tvViewStack firstObject] view] respondsToSelector:@selector(forceRefresh)]) {
  150. [[[tvViewStack firstObject] view] performSelector:@selector(forceRefresh)];
  151. }
  152. kHIDEWAIT;
  153. }
  154. [[wbLoginRegisterViewController sharedLRVC] closeAlert];
  155. [[wbFooter sharedFooter] setNeedsDisplay];
  156. if ([[[viewStack lastObject] view] respondsToSelector:@selector(userLoggedIn)]) {
  157. [[[viewStack lastObject] view] performSelector:@selector(userLoggedIn)];
  158. }
  159. DCMSG(viewStack);
  160. // [[wbData sharedData] performSelectorInBackground:@selector(getAllFeeds) withObject:nil];
  161. // [[wbData sharedData] performSelectorInBackground:@selector(getAllMissionFeeds) withObject:nil];
  162. // [[wbData sharedData] performSelectorInBackground:@selector(getAllActivity) withObject:nil];
  163. }
  164. -(void)askCountry
  165. {
  166. wbStartViewController *startView = [[wbStartViewController alloc] init];
  167. [self.view addSubview:startView.view];
  168. }
  169. -(void)initViewControllers
  170. {
  171. videoFeedController = [[wbVideoFeedViewController alloc] init];
  172. [videoFeedController setHeaderLogo:@"_wb_"];
  173. homeViewStack = [[NSMutableArray alloc] init];
  174. [homeViewStack addObject:videoFeedController];
  175. missionController = [[wbNewMissionViewController alloc] init];
  176. [missionController setHeaderLogo:@"_wb_"];
  177. missionViewStack = [[NSMutableArray alloc] init];
  178. [missionViewStack addObject:missionController];
  179. tvChannelsController = [[wbTvViewController alloc] init];
  180. [tvChannelsController setOpenChannelWithId:0];
  181. [tvChannelsController setHeaderLogo:@"_tv_"];
  182. tvViewStack = [[NSMutableArray alloc] init];
  183. [tvViewStack addObject:tvChannelsController];
  184. defaultTvViewController = tvChannelsController;
  185. userViewController = [[wbUserViewController alloc] init];
  186. if (![[wbAPI sharedAPI] is_guest]) {
  187. [userViewController setUser:[wbUser sharedUser]];
  188. [userViewController setHeaderLogo:[[wbUser sharedUser] username]];
  189. }
  190. userViewStack = [[NSMutableArray alloc] init];
  191. [userViewStack addObject:userViewController];
  192. }
  193. -(void)setDefaultTvChannel:(NSNumber*)_defaultTvChannel
  194. {
  195. defaultTvChannel = _defaultTvChannel;
  196. if ([defaultTvChannel integerValue] > 0) {
  197. wbTvViewController *newTvChannelsController = [[wbTvViewController alloc] init];
  198. [newTvChannelsController setOpenChannelWithId:[_defaultTvChannel integerValue]];
  199. [newTvChannelsController setHeaderLogo:@"_tv_"];
  200. [tvViewStack addObject:newTvChannelsController];
  201. tvHomeIndex = [tvViewStack count]-1;
  202. defaultTvViewController = newTvChannelsController;
  203. }
  204. tvHomeIndex = [tvViewStack count]-1;
  205. }
  206. -(void)startNewVideoFeed:(id)sender feed:(NSDictionary*)feed
  207. {
  208. wbVideoFeedViewController *newVideoFeedController = [[wbVideoFeedViewController alloc] init];
  209. [[wbHeader sharedHeader] setHeaderBackButton:YES];
  210. [newVideoFeedController setHasBack:YES];
  211. [newVideoFeedController setStartFeed:feed];
  212. [viewStack addObject:newVideoFeedController];
  213. [containerView addSubview:newVideoFeedController.view];
  214. }
  215. -(void)startUserPage:(wbUser*)user
  216. {
  217. [self startUserPage:nil user:user];
  218. }
  219. -(void)startUserPage:(id)sender user:(wbUser*)user
  220. {
  221. wbUserViewController *newUserViewController = [[wbUserViewController alloc] init];
  222. [[wbHeader sharedHeader] setHeaderBackButton:YES];
  223. [newUserViewController setHasBack:YES];
  224. [newUserViewController setUser:user];
  225. [viewStack addObject:newUserViewController];
  226. [containerView addSubview:newUserViewController.view];
  227. }
  228. -(void)startSingleMission:(wbMission*)mission
  229. {
  230. wbSingleMissionViewController *singleMissionController = [[wbSingleMissionViewController alloc] init];
  231. [singleMissionController setHeaderLogo:@"_mission_"];
  232. [[wbHeader sharedHeader] setHeaderBackButton:YES];
  233. [[wbHeader sharedHeader] setShowChangeCountryButton:NO];
  234. [singleMissionController setHasBack:YES];
  235. [singleMissionController setMission:mission];
  236. [viewStack addObject:singleMissionController];
  237. [containerView addSubview:singleMissionController.view];
  238. }
  239. -(void)startSettings:(id)sender
  240. {
  241. if (settingsController == nil || ![[wbAPI sharedAPI] is_guest]) {
  242. settingsController = [[wbSettingsViewController alloc] init];
  243. }
  244. [settingsController setHeaderLogo:[NSLocalizedString(@"USER_SETTINGS", @"") capitalizedString] ];
  245. if (sender == nil) {
  246. [[wbHeader sharedHeader] setHeaderBackButton:YES];
  247. [settingsController setHasBack:YES];
  248. [viewStack addObject:settingsController];
  249. }
  250. [containerView addSubview:settingsController.view];
  251. }
  252. -(void)startSingleVideo:(id)sender
  253. {
  254. wbSingleVideoViewController *singleVideoController = [[wbSingleVideoViewController alloc] init];
  255. [singleVideoController setHeaderLogo:@"_wb_"];
  256. [[wbHeader sharedHeader] setHeaderBackButton:YES];
  257. [singleVideoController setHasBack:YES];
  258. [viewStack addObject:singleVideoController];
  259. [containerView addSubview:singleVideoController.view];
  260. }
  261. -(void)startTvChannelView:(NSNumber*)channelId
  262. {
  263. wbTvViewController *tvViewController = [[wbTvViewController alloc] init];
  264. [tvViewController setHeaderLogo:@"_tv_"];
  265. [tvViewController setOpenChannelWithId:[channelId integerValue]];
  266. [viewStack addObject:tvViewController];
  267. if ([viewStack count] > tvHomeIndex+1) {
  268. [[wbHeader sharedHeader] setHeaderBackButton:YES];
  269. [tvViewController setHasBack:YES];
  270. } else {
  271. [[wbHeader sharedHeader] setHeaderBackButton:NO];
  272. [tvViewController setHasBack:NO];
  273. }
  274. [containerView addSubview:tvViewController.view];
  275. }
  276. -(void)startMissionCountrySelect:(id)sender
  277. {
  278. wbMissionCountrySelectViewController *viewC = [missionController countrySelect];
  279. [viewStack addObject:viewC];
  280. [[wbHeader sharedHeader] setShowChangeCountryButton:NO];
  281. [containerView addSubview:viewC.view];
  282. }
  283. -(void)startCamera:(id)sender
  284. {
  285. if ([[viewStack lastObject] respondsToSelector:@selector(startCamera)] && sender != nil) {
  286. [[viewStack lastObject] performSelector:@selector(startCamera)];
  287. } else {
  288. cameraViewController = nil;
  289. DCMSG(sender);
  290. NSBlockOperation *op = [NSBlockOperation blockOperationWithBlock:^(void){
  291. [[wbWaitView sharedWait] performSelectorOnMainThread:@selector(showLandscape) withObject:NULL waitUntilDone:YES];
  292. }];
  293. [op setCompletionBlock:^(void){
  294. [self performSelectorOnMainThread:@selector(startCameraInLocal:) withObject:sender waitUntilDone:NO];
  295. }];
  296. [op start];
  297. }
  298. }
  299. -(void)startCameraInLocal:(id)sender
  300. {
  301. if ([UIImagePickerController isSourceTypeAvailable: UIImagePickerControllerSourceTypeCamera]) {
  302. if (cameraViewController == nil) {
  303. cameraViewController = [[wbPBJCameraViewController alloc] init];
  304. }
  305. [cameraViewController setModalTransitionStyle:UIModalTransitionStyleCoverVertical];
  306. [self presentViewController:cameraViewController animated:YES completion:NULL];
  307. } else {
  308. wbCameraRollViewController *cameraRollViewController = [[wbCameraRollViewController alloc] init];
  309. [cameraRollViewController setModalTransitionStyle:UIModalTransitionStyleCoverVertical];
  310. [self presentViewController:cameraRollViewController animated:YES completion:NULL];
  311. }
  312. }
  313. -(void)closeCamera:(id)sender
  314. {
  315. NSError *error;
  316. DNSLog(@"%@",[SSKeychain allAccounts]);
  317. [SSKeychain setAccessibilityType:kSecAttrAccessibleAlways];
  318. DNSLog(@"%@",[SSKeychain passwordForService:kAPPNAME account:@"token" error:&error]);
  319. DNSLog(@"%@",error);
  320. DNSLog(@"%@",kAPPNAME);
  321. [sender dismissViewControllerAnimated:YES completion:^(void){
  322. [containerView addSubview:[[viewStack lastObject] view]];
  323. DNSLog(@"%@",kWHAMBUSHTOKEN);
  324. }];
  325. }
  326. -(void)startCameraRoll:(id)sender
  327. {
  328. wbCameraRollViewController *cameraRollViewController = [[wbCameraRollViewController alloc] init];
  329. [cameraRollViewController setModalTransitionStyle:UIModalTransitionStyleCoverVertical];
  330. if (cameraViewController == nil) {
  331. [self presentViewController:cameraRollViewController animated:YES completion:NULL];
  332. } else {
  333. [cameraViewController presentViewController:cameraRollViewController animated:YES completion:NULL];
  334. }
  335. }
  336. -(void)startProfilePicGallery:(id)sender
  337. {
  338. wbProfilePicPickerViewController *profilePicCameraViewController = [[wbProfilePicPickerViewController alloc] init];
  339. [profilePicCameraViewController setModalTransitionStyle:UIModalTransitionStyleCoverVertical];
  340. [profilePicCameraViewController setIsCamera:NO];
  341. [profilePicCameraViewController setParent:sender];
  342. [self presentViewController:profilePicCameraViewController animated:YES completion:NULL];
  343. }
  344. -(void)startProfilePicCamera:(id)sender
  345. {
  346. wbProfilePicPickerViewController *profilePicCameraViewController = [[wbProfilePicPickerViewController alloc] init];
  347. [profilePicCameraViewController setModalTransitionStyle:UIModalTransitionStyleCoverVertical];
  348. [profilePicCameraViewController setIsCamera:YES];
  349. [profilePicCameraViewController setParent:sender];
  350. [self presentViewController:profilePicCameraViewController animated:YES completion:NULL];
  351. }
  352. -(void)startUpload:(id)sender
  353. {
  354. DCMSG(sender);
  355. [self.view setHidden:YES];
  356. if ([sender isKindOfClass:[wbCameraRollViewController class]]) {
  357. [sender dismissViewControllerAnimated:YES completion:^(void){
  358. [cameraViewController dismissViewControllerAnimated:YES completion:^(void){
  359. [self.view setHidden:NO];
  360. wbUploadViewController *uploadViewController = [[wbUploadViewController alloc] init];
  361. if ([sender isKindOfClass:[NSDictionary class]]) {
  362. [uploadViewController setUploadSetupData:sender];
  363. }
  364. [[wbHeader sharedHeader] setLogo:@"_upload_"];
  365. [[wbHeader sharedHeader] setHeaderBackButton:YES];
  366. [[wbHeader sharedHeader] setShowChangeCountryButton:NO];
  367. [viewStack addObject:uploadViewController];
  368. [containerView addSubview:uploadViewController.view];
  369. [[wbFooter sharedFooter] setEmptyFooter:YES];
  370. kHIDEWAIT;
  371. }];
  372. }];
  373. DNSLog(@"VC Class");
  374. } else if ([sender isKindOfClass:[wbPBJCameraViewController class]]) {
  375. [sender dismissViewControllerAnimated:YES completion:^(void){
  376. [self.view setHidden:NO];
  377. wbUploadViewController *uploadViewController = [[wbUploadViewController alloc] init];
  378. if ([sender isKindOfClass:[NSDictionary class]]) {
  379. [uploadViewController setUploadSetupData:sender];
  380. }
  381. [[wbHeader sharedHeader] setLogo:@"_upload_"];
  382. [[wbHeader sharedHeader] setHeaderBackButton:YES];
  383. [[wbHeader sharedHeader] setShowChangeCountryButton:NO];
  384. [viewStack addObject:uploadViewController];
  385. [containerView addSubview:uploadViewController.view];
  386. [[wbFooter sharedFooter] setEmptyFooter:YES];
  387. kHIDEWAIT;
  388. }];
  389. } else {
  390. [self.view setHidden:NO];
  391. wbUploadViewController *uploadViewController = [[wbUploadViewController alloc] init];
  392. if ([sender isKindOfClass:[NSDictionary class]]) {
  393. [uploadViewController setUploadSetupData:sender];
  394. }
  395. [[wbHeader sharedHeader] setLogo:@"_upload_"];
  396. [[wbHeader sharedHeader] setHeaderBackButton:YES];
  397. [[wbHeader sharedHeader] setShowChangeCountryButton:NO];
  398. [viewStack addObject:uploadViewController];
  399. [containerView addSubview:uploadViewController.view];
  400. [[wbFooter sharedFooter] setEmptyFooter:YES];
  401. }
  402. }
  403. -(void)startUploadWithData:(NSDictionary*)data
  404. {
  405. DCMSG(data);
  406. [self startUpload:data];
  407. }
  408. -(void)logout:(id)sender //TODO: FIX
  409. {
  410. kSHOWWAIT;
  411. [[containerView subviews] makeObjectsPerformSelector:@selector(removeFromSuperview)];
  412. homeViewStack = nil;
  413. missionViewStack = nil;
  414. tvViewStack = nil;
  415. userViewStack = nil;
  416. videoFeedController = nil;
  417. cameraViewController = nil;
  418. missionController = nil;
  419. userViewController = nil;
  420. tvFeedController = nil;
  421. [[wbAPI sharedAPI] tryLogin];
  422. }
  423. -(void)goHome:(id)sender
  424. {
  425. BOOL scroll = NO;
  426. if ([viewStack count] == 1) {
  427. scroll = YES;
  428. }
  429. for (NSInteger i = [viewStack count]-1; i > 0; i--) {
  430. [self goBack:nil];
  431. }
  432. if (sender == nil) {
  433. DCMSG(viewStack);
  434. [[wbHeader sharedHeader] setHeaderBackButton:NO];
  435. } else {
  436. [self changeViewStack:sender];
  437. }
  438. if ([[[viewStack lastObject] view] respondsToSelector:@selector(scrollTableTop)] && scroll) {
  439. [[[viewStack lastObject] view] performSelector:@selector(scrollTableTop)];
  440. }
  441. kHIDEWAIT;
  442. }
  443. -(void)goTvHome:(id)sender
  444. {
  445. NSAssert(defaultTvViewController != nil, @"defaultTvViewController is null");
  446. // BOOL scroll = NO;
  447. // if ([viewStack count] == tvHomeIndex) {
  448. // scroll = YES;
  449. // }
  450. for (NSInteger i = [viewStack count]-1; i > 0; i--) {
  451. [self goBack:nil];
  452. }
  453. [tvViewStack addObject:defaultTvViewController];
  454. [self changeViewStack:@"tv"];
  455. [[wbHeader sharedHeader] setHeaderBackButton:NO];
  456. if ([[[viewStack lastObject] view] respondsToSelector:@selector(scrollTableTop)]/* && scroll*/) {
  457. [[[viewStack lastObject] view] performSelector:@selector(scrollTableTop)];
  458. }
  459. }
  460. -(void)hideSettings
  461. {
  462. if ([[wbAPI sharedAPI] is_guest] && settingsController != nil) {
  463. [settingsController.view removeFromSuperview];
  464. [[wbHeader sharedHeader] setLogo:[(wbBaseViewController*)[viewStack lastObject] headerLogo]];
  465. [[(UIViewController*)[viewStack lastObject] view] setNeedsDisplay];
  466. settingsController = nil;
  467. }
  468. }
  469. -(void)goBack:(id)sender
  470. {
  471. [[wbFooter sharedFooter] setEmptyFooter:NO];
  472. [[[viewStack lastObject] view] removeFromSuperview];
  473. DNSLog(@"Back from %@",[[viewStack lastObject] description]);
  474. if (![sender isKindOfClass:[wbMissionCountrySelectTableView class]])
  475. {
  476. kHIDEWAIT
  477. }
  478. // kHIDEWAIT
  479. [viewStack removeLastObject];
  480. DCMSG(viewStack);
  481. [[wbHeader sharedHeader] setLogo:[[viewStack lastObject] headerLogo]];
  482. DNSLog(@"headerlogo: %@",[[viewStack lastObject] headerLogo]);
  483. NSInteger viewStackHome = 1;
  484. if ([[viewStack lastObject] isKindOfClass:[wbTvViewController class]]) {
  485. viewStackHome = 2;
  486. }
  487. if ([viewStack count] > viewStackHome) {
  488. [[wbHeader sharedHeader] setHeaderBackButton:YES];
  489. } else {
  490. [[wbHeader sharedHeader] setHeaderBackButton:NO];
  491. }
  492. wbHeader *tmp = [wbHeader sharedHeader];
  493. [tmp setGreen:YES];
  494. [containerView addSubview:[[viewStack lastObject] view]];
  495. if ([[viewStack lastObject] isKindOfClass:[wbUserViewController class]]) {
  496. if ([[[viewStack lastObject] view] respondsToSelector:@selector(refreshTabs)]) {
  497. [[[viewStack lastObject] view] performSelector:@selector(refreshTabs)];
  498. }
  499. }
  500. if ([[[viewStack lastObject] view] respondsToSelector:@selector(refreshRow)]) {
  501. [[[viewStack lastObject] view] performSelector:@selector(refreshRow)];
  502. }
  503. if ([[viewStack lastObject] respondsToSelector:@selector(viewDidAppear:)]) {
  504. [[viewStack lastObject] performSelector:@selector(viewDidAppear:) withObject:nil];
  505. }
  506. //DCMSG([containerView subviews]);
  507. //DCMSG(viewStack);
  508. }
  509. -(void)changeViewStack:(NSString*)stack
  510. {
  511. [self hideSettings];
  512. BOOL noBack = NO;
  513. [[containerView subviews] makeObjectsPerformSelector:@selector(removeFromSuperview)];
  514. [[wbHeader sharedHeader] setShowChangeCountryButton:NO];
  515. if ([stack isEqualToString:@"mission"]) {
  516. [[wbHeader sharedHeader] setLogo:@"_wb_"];
  517. [[wbHeader sharedHeader] setShowChangeCountryButton:YES];
  518. [[[wbFooter sharedFooter] homeButton]setSelected:NO];
  519. [[[wbFooter sharedFooter] missionButton]setSelected:YES];
  520. [[[wbFooter sharedFooter] tvButton]setSelected:NO];
  521. [[[wbFooter sharedFooter] userButton]setSelected:NO];
  522. viewStack = missionViewStack;
  523. } else if ([stack isEqualToString:@"tv"]) {
  524. [[wbHeader sharedHeader] setLogo:@"_tv_"];
  525. [[wbHeader sharedHeader] setShowChangeCountryButton:YES];
  526. if ([tvViewStack count] <= tvHomeIndex+1) {
  527. noBack = YES;
  528. }
  529. [[[wbFooter sharedFooter] homeButton]setSelected:NO];
  530. [[[wbFooter sharedFooter] missionButton]setSelected:NO];
  531. [[[wbFooter sharedFooter] tvButton]setSelected:YES];
  532. [[[wbFooter sharedFooter] userButton]setSelected:NO];
  533. viewStack = tvViewStack;
  534. } else if ([stack isEqualToString:@"user"]) {
  535. [[wbHeader sharedHeader] setLogo:[[wbUser sharedUser] username]];
  536. [[[wbFooter sharedFooter] homeButton]setSelected:NO];
  537. [[[wbFooter sharedFooter] missionButton]setSelected:NO];
  538. [[[wbFooter sharedFooter] tvButton]setSelected:NO];
  539. [[[wbFooter sharedFooter] userButton]setSelected:YES];
  540. viewStack = userViewStack;
  541. } else {
  542. [[wbHeader sharedHeader] setLogo:@"_wb_"];
  543. [[[wbFooter sharedFooter] homeButton]setSelected:YES];
  544. [[[wbFooter sharedFooter] missionButton]setSelected:NO];
  545. [[[wbFooter sharedFooter] tvButton]setSelected:NO];
  546. [[[wbFooter sharedFooter] userButton]setSelected:NO];
  547. viewStack = homeViewStack;
  548. }
  549. if ([viewStack count] > 1 && !noBack) {
  550. [[wbHeader sharedHeader] setHeaderBackButton:YES];
  551. } else {
  552. [[wbHeader sharedHeader] setHeaderBackButton:NO];
  553. }
  554. DNSLog(@"%@",[[viewStack lastObject] headerLogo]);
  555. DNSLog(@"%@",[[wbHeader sharedHeader] logo]);
  556. [[wbHeader sharedHeader] setLogo:[[viewStack lastObject] headerLogo]];
  557. [containerView addSubview:[[viewStack lastObject] view]];
  558. }
  559. -(void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
  560. {
  561. if ([[viewStack lastObject] isKindOfClass:[wbSingleVideoViewController class]] || [[viewStack lastObject] isKindOfClass:[wbSingleMissionViewController class]]) {
  562. [[viewStack lastObject] willRotateToInterfaceOrientation:toInterfaceOrientation duration:duration];
  563. }
  564. }
  565. - (void)didReceiveMemoryWarning
  566. {
  567. [super didReceiveMemoryWarning];
  568. // Dispose of any resources that can be recreated.
  569. }
  570. - (BOOL)prefersStatusBarHidden
  571. {
  572. return YES;
  573. }
  574. - (UIStatusBarStyle)preferredStatusBarStyle
  575. {
  576. return UIStatusBarStyleLightContent;
  577. }
  578. - (BOOL) shouldAutorotate
  579. {
  580. if ([[viewStack lastObject] isKindOfClass:[wbSingleVideoViewController class]] || [[viewStack lastObject] isKindOfClass:[wbSingleMissionViewController class]]) {
  581. return [[viewStack lastObject] shouldAutorotate];
  582. //return YES;
  583. } else {
  584. return NO;
  585. }
  586. }
  587. - (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
  588. {
  589. return UIInterfaceOrientationPortrait;
  590. }
  591. @end