HomeModeUpdateViewController.m 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200
  1. //
  2. // HomeModeUpdateViewController.m
  3. //
  4. //
  5. // Created by Jason Lee on 10/30/15.
  6. //
  7. //
  8. #import "JDObject.h"
  9. #import "CustomButton.h"
  10. #import "CustomLabel.h"
  11. #import "CustomImageView.h"
  12. #import "RequestHandler.h"
  13. #import "JDJSONModel.h"
  14. #import "HomeModeUpdateViewController.h"
  15. #import "ModeModel.h"
  16. #import "DeviceSelectPopupView.h"
  17. #import "HomeModeSettingsViewController.h"
  18. @interface HomeModeUpdateViewController () {
  19. NSTimer *_modeChangePollingTimer;
  20. NSDate *_requestTime;
  21. }
  22. @end
  23. #pragma mark - Class Definition
  24. @implementation HomeModeUpdateViewController
  25. - (void)viewDidLoad {
  26. [super viewDidLoad];
  27. // Do any additional setup after loading the view.
  28. [self initUI];
  29. [self prepareViewDidLoad];
  30. }
  31. - (void)initUI {
  32. NSString *message = nil, *highlightMessage = nil;
  33. NSString *btnTitle = nil;
  34. if ([_mode.basicModeCode isEqualToString:HOME_MODE_HOME]) {
  35. btnTitle = @"귀가";
  36. highlightMessage = @"잘 돌아왔어요!";
  37. message = @"쾌적한 귀가모드를 \r실행할까요?";
  38. } else if ([_mode.basicModeCode isEqualToString:HOME_MODE_AWAY]) {
  39. btnTitle = @"외출";
  40. highlightMessage = @"안녕히 다녀오세요!";
  41. message = @"안전한 외출모드를 \r실행할까요?";
  42. } else if ([_mode.basicModeCode isEqualToString:HOME_MODE_MORNING]) {
  43. btnTitle = @"기상";
  44. highlightMessage = @"좋은 아침!";
  45. message = @"상쾌한 기상모드를\r실행할까요?";
  46. } else if ([_mode.basicModeCode isEqualToString:HOME_MODE_NIGHT]) {
  47. btnTitle = @"취침";
  48. highlightMessage = @"잘 자요!";
  49. message = @"편안한 취침모드를 \r실행할까요?";
  50. }
  51. //mode status check
  52. _btnSetting.hidden = [JDFacade facade].loginUser.level < 90; //일반 멤버 - 설정버튼 감춤
  53. if (_btnSetting.hidden) {
  54. if (!_mode.homegrpSceneId || [_mode.homegrpSceneId isEmptyString]) {//지정된 액션이 없을 경우,
  55. [[JDFacade facade] toast:@"모드를 변경할 때\r동작할 장치를 지정해보세요"];
  56. highlightMessage = [NSString stringWithFormat:@"%@ 모드로 변경할까요?", _mode.modeName];
  57. message = @"일부 장치가 삭제되어\r모드는 변경할 수 있지만\r장치는 제어되지 않습니다";
  58. } else if (_mode.deleteCnt) {
  59. [[JDFacade facade] toast:@"삭제된 장치를\r정리하세요"];
  60. }
  61. }
  62. [_btnExecute setTitle:btnTitle forState:UIControlStateNormal];
  63. _lblMessage.text = [NSString stringWithFormat:@"%@\n\n%@", highlightMessage, message];
  64. [_lblMessage setColor:kUITextColor02 text:highlightMessage];
  65. //TODO : set icon;
  66. }
  67. - (void)prepareViewDidLoad {
  68. }
  69. #pragma mark - Main Logic
  70. - (void)requestChangeHomeMode {
  71. NSString *modeTitle = [NSString stringWithFormat:@"%@ 모드", _mode.modeName];
  72. _lblMessage.text = [NSString stringWithFormat:@"%@\r\r실행 중입니다.", modeTitle];
  73. [_lblMessage setColor:kUITextColor02 text:modeTitle];
  74. NSString *path = [NSString stringWithFormat:API_POST_DASHBOARD_MODE_CHANGE, _mode.modeId];
  75. [[RequestHandler handler] sendAsyncPostRequestAPIPath:path parameters:nil modelClass:[JDJSONModel class] completion:^(id responseObject) {
  76. if ([[JDFacade facade].currentViewController isEqual:self]) {
  77. //check requet done,
  78. _requestTime = [NSDate systemDate];
  79. if (_mode.homegrpSceneId && ![_mode.homegrpSceneId isEmptyString]) {//제어할 장치가 있는 경우,
  80. [self requestPollingHomeModeChanges];
  81. } else {
  82. [self setContentsForComplete];
  83. }
  84. }
  85. } failure:^(id errorObject) {
  86. JDErrorModel *error = (JDErrorModel *)errorObject;
  87. [[JDFacade facade] alert:error.errorMessage];
  88. }];
  89. }
  90. - (NSInteger)elapsedSecondsFromNow {
  91. NSInteger seconds = 0;
  92. if (_requestTime) {
  93. NSTimeInterval elapsed = [[NSDate systemDate] timeIntervalSinceDate:_requestTime];
  94. seconds = elapsed;
  95. }
  96. return seconds;
  97. }
  98. - (void)requestPollingHomeModeChanges {
  99. //every 3sec?
  100. NSString *path = [NSString stringWithFormat:API_GET_MODE_STATUS, _mode.modeId];
  101. dispatch_sync(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{//RUN to background thread
  102. ModeModel *response = [[RequestHandler handler] sendSyncGetRequestAPIPath:path parameters:nil
  103. modelClass:[ModeModel class] showLoadingView:YES];
  104. if (response) {
  105. BOOL isRequestDone = [response.status boolValue];
  106. BOOL isOverTimeLimit = [self elapsedSecondsFromNow] > 10;
  107. if (isOverTimeLimit || isRequestDone) {
  108. [_modeChangePollingTimer invalidate];
  109. _modeChangePollingTimer = nil;
  110. _requestTime = nil;
  111. if (isRequestDone) {
  112. [self setContentsForComplete];
  113. // [[JDFacade facade] toast:[NSString stringWithFormat:@"%@ 상태가 되었습니다", _mode.modeName]];
  114. }
  115. } else {
  116. if (!_modeChangePollingTimer) {
  117. _modeChangePollingTimer = [NSTimer scheduledTimerWithTimeInterval:3 target:self selector:@selector(requestPollingHomeModeChanges) userInfo:nil repeats:YES];
  118. }
  119. }
  120. }
  121. });
  122. }
  123. - (void)setContentsForComplete {
  124. NSString *highlightMessage = nil;
  125. highlightMessage = [NSString stringWithFormat:@"%@ 상태가 되었습니다.", _mode.modeName];
  126. //TODO : chagne button image
  127. }
  128. #pragma mark - UI Events
  129. - (IBAction)btnExecuteTouched:(id)sender {
  130. [self requestChangeHomeMode];
  131. }
  132. - (IBAction)btnSettingTouched:(id)sender {
  133. HomeModeSettingsViewController *vc = (HomeModeSettingsViewController *)[CommonUtil instantiateViewControllerWithIdentifier:@"HomeModeSettingsViewController" storyboardName:@"Main"];
  134. vc.mode = _mode;
  135. [self presentViewController:vc animated:YES completion:nil];
  136. }
  137. - (IBAction)btnCloseTouched:(id)sender {
  138. [self dismissViewControllerAnimated:YES completion:nil];
  139. }
  140. #pragma mark - MemoryWarning
  141. - (void)didReceiveMemoryWarning
  142. {
  143. [super didReceiveMemoryWarning];
  144. // Dispose of any resources that can be recreated.
  145. }
  146. @end