// // HomeModeUpdateViewController.m // // // Created by Jason Lee on 10/30/15. // // #import "JDObject.h" #import "CustomButton.h" #import "CustomLabel.h" #import "CustomImageView.h" #import "RequestHandler.h" #import "JDJSONModel.h" #import "HomeModeUpdateViewController.h" #import "ModeModel.h" #import "DeviceSelectPopupView.h" #import "HomeModeSettingsViewController.h" @interface HomeModeUpdateViewController () { NSTimer *_modeChangePollingTimer; NSDate *_requestTime; } @end #pragma mark - Class Definition @implementation HomeModeUpdateViewController - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. [self initUI]; [self prepareViewDidLoad]; } - (void)initUI { NSString *message = nil, *highlightMessage = nil; NSString *btnTitle = nil; if ([_mode.basicModeCode isEqualToString:HOME_MODE_HOME]) { btnTitle = @"귀가"; highlightMessage = @"잘 돌아왔어요!"; message = @"쾌적한 귀가모드를 \r실행할까요?"; } else if ([_mode.basicModeCode isEqualToString:HOME_MODE_AWAY]) { btnTitle = @"외출"; highlightMessage = @"안녕히 다녀오세요!"; message = @"안전한 외출모드를 \r실행할까요?"; } else if ([_mode.basicModeCode isEqualToString:HOME_MODE_MORNING]) { btnTitle = @"기상"; highlightMessage = @"좋은 아침!"; message = @"상쾌한 기상모드를\r실행할까요?"; } else if ([_mode.basicModeCode isEqualToString:HOME_MODE_NIGHT]) { btnTitle = @"취침"; highlightMessage = @"잘 자요!"; message = @"편안한 취침모드를 \r실행할까요?"; } //mode status check _btnSetting.hidden = [JDFacade facade].loginUser.level < 90; //일반 멤버 - 설정버튼 감춤 if (_btnSetting.hidden) { if (!_mode.homegrpSceneId || [_mode.homegrpSceneId isEmptyString]) {//지정된 액션이 없을 경우, [[JDFacade facade] toast:@"모드를 변경할 때\r동작할 장치를 지정해보세요"]; highlightMessage = [NSString stringWithFormat:@"%@ 모드로 변경할까요?", _mode.modeName]; message = @"일부 장치가 삭제되어\r모드는 변경할 수 있지만\r장치는 제어되지 않습니다"; } else if (_mode.deleteCnt) { [[JDFacade facade] toast:@"삭제된 장치를\r정리하세요"]; } } [_btnExecute setTitle:btnTitle forState:UIControlStateNormal]; _lblMessage.text = [NSString stringWithFormat:@"%@\n\n%@", highlightMessage, message]; [_lblMessage setColor:kUITextColor02 text:highlightMessage]; //TODO : set icon; } - (void)prepareViewDidLoad { } #pragma mark - Main Logic - (void)requestChangeHomeMode { NSString *modeTitle = [NSString stringWithFormat:@"%@ 모드", _mode.modeName]; _lblMessage.text = [NSString stringWithFormat:@"%@\r\r실행 중입니다.", modeTitle]; [_lblMessage setColor:kUITextColor02 text:modeTitle]; NSString *path = [NSString stringWithFormat:API_POST_DASHBOARD_MODE_CHANGE, _mode.modeId]; [[RequestHandler handler] sendAsyncPostRequestAPIPath:path parameters:nil modelClass:[JDJSONModel class] completion:^(id responseObject) { if ([[JDFacade facade].currentViewController isEqual:self]) { //check requet done, _requestTime = [NSDate systemDate]; if (_mode.homegrpSceneId && ![_mode.homegrpSceneId isEmptyString]) {//제어할 장치가 있는 경우, [self requestPollingHomeModeChanges]; } else { [self setContentsForComplete]; } } } failure:^(id errorObject) { JDErrorModel *error = (JDErrorModel *)errorObject; [[JDFacade facade] alert:error.errorMessage]; }]; } - (NSInteger)elapsedSecondsFromNow { NSInteger seconds = 0; if (_requestTime) { NSTimeInterval elapsed = [[NSDate systemDate] timeIntervalSinceDate:_requestTime]; seconds = elapsed; } return seconds; } - (void)requestPollingHomeModeChanges { //every 3sec? NSString *path = [NSString stringWithFormat:API_GET_MODE_STATUS, _mode.modeId]; dispatch_sync(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{//RUN to background thread ModeModel *response = [[RequestHandler handler] sendSyncGetRequestAPIPath:path parameters:nil modelClass:[ModeModel class] showLoadingView:YES]; if (response) { BOOL isRequestDone = [response.status boolValue]; BOOL isOverTimeLimit = [self elapsedSecondsFromNow] > 10; if (isOverTimeLimit || isRequestDone) { [_modeChangePollingTimer invalidate]; _modeChangePollingTimer = nil; _requestTime = nil; if (isRequestDone) { [self setContentsForComplete]; // [[JDFacade facade] toast:[NSString stringWithFormat:@"%@ 상태가 되었습니다", _mode.modeName]]; } } else { if (!_modeChangePollingTimer) { _modeChangePollingTimer = [NSTimer scheduledTimerWithTimeInterval:3 target:self selector:@selector(requestPollingHomeModeChanges) userInfo:nil repeats:YES]; } } } }); } - (void)setContentsForComplete { NSString *highlightMessage = nil; highlightMessage = [NSString stringWithFormat:@"%@ 상태가 되었습니다.", _mode.modeName]; //TODO : chagne button image } #pragma mark - UI Events - (IBAction)btnExecuteTouched:(id)sender { [self requestChangeHomeMode]; } - (IBAction)btnSettingTouched:(id)sender { HomeModeSettingsViewController *vc = (HomeModeSettingsViewController *)[CommonUtil instantiateViewControllerWithIdentifier:@"HomeModeSettingsViewController" storyboardName:@"Main"]; vc.mode = _mode; [self presentViewController:vc animated:YES completion:nil]; } - (IBAction)btnCloseTouched:(id)sender { [self dismissViewControllerAnimated:YES completion:nil]; } #pragma mark - MemoryWarning - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } @end