|
|
@@ -67,11 +67,24 @@
|
|
|
|
|
|
}
|
|
|
|
|
|
+ //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];
|
|
|
|
|
|
- _btnSetting.hidden = [JDFacade facade].loginUser.level < 90;
|
|
|
|
|
|
//TODO : set icon;
|
|
|
}
|
|
|
@@ -96,19 +109,60 @@
|
|
|
|
|
|
//check requet done,
|
|
|
_requestTime = [NSDate systemDate];
|
|
|
- [self requestPollingHomeModeChanges];
|
|
|
|
|
|
- [self setContentsForComplete];
|
|
|
+ if (_mode.homegrpSceneId && ![_mode.homegrpSceneId isEmptyString]) {//제어할 장치가 있는 경우,
|
|
|
+ [self requestPollingHomeModeChanges];
|
|
|
+ } else {
|
|
|
+ [self setContentsForComplete];
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
- [[JDFacade facade] toast:[NSString stringWithFormat:@"%@ 상태가 되었습니다", _mode.modeName]];
|
|
|
-
|
|
|
} 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;
|
|
|
@@ -143,77 +197,4 @@
|
|
|
// Dispose of any resources that can be recreated.
|
|
|
}
|
|
|
|
|
|
-- (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];
|
|
|
-
|
|
|
-
|
|
|
- if (isRequestDone) {
|
|
|
-
|
|
|
- } else {
|
|
|
- //실행 여부 및 10초 경과 확인
|
|
|
- BOOL isOverTimeLimit = [self elapsedSecondsFromNow] > 10;
|
|
|
- }
|
|
|
-
|
|
|
- _mode.
|
|
|
- rdevice.isRequesting = [rdevice.contentValue isEqualToString:matchedDevice.contentValue] && !hasChangedStatus && !isOverTimeLimit;
|
|
|
-
|
|
|
- //TODO - home hub check
|
|
|
- // rdevice.requestTime = matchedDevice.requestTime;
|
|
|
- // rdevice.collectTime = matchedDevice.collectTime;
|
|
|
- rdevice.onlineState = matchedDevice.onlineState;
|
|
|
-
|
|
|
- if (!rdevice.isRequesting || !rdevice.isOnline || ![JDFacade facade].loginUser.isHomehubOnline) {//정상적으로 변경됨.
|
|
|
- rdevice.contentValue = matchedDevice.contentValue;
|
|
|
- [_commandArray removeObject:rdevice];
|
|
|
-
|
|
|
- isStatusChanged = YES;
|
|
|
- }
|
|
|
-
|
|
|
-#ifdef DEBUG_MODE
|
|
|
- NSLogInfo(@"==########== device command status = %@, elapsedTime = %zd ==########==", [JDFacade facade].loginUser.homehubOnlineState, elapsedTime);
|
|
|
-#endif
|
|
|
- }];
|
|
|
- }
|
|
|
-
|
|
|
- if (_commandArray.count) {//커맨드 실행 중인 디바이스가 있을 경우,
|
|
|
- //schedul timer.
|
|
|
- if (!_deviceCommandsBackgroundTimer) {
|
|
|
- _deviceCommandsBackgroundTimer = [NSTimer scheduledTimerWithTimeInterval:3 target:self selector:@selector(requestPollingCommandStatusOfDeviceInBackground:) userInfo:nil repeats:YES];
|
|
|
- }
|
|
|
- } else {
|
|
|
- [_deviceCommandsBackgroundTimer invalidate];
|
|
|
- _deviceCommandsBackgroundTimer = nil;
|
|
|
- }
|
|
|
-
|
|
|
- //변화가 있을 경우, 컬렉션뷰를 리로드
|
|
|
- if (isStatusChanged) {
|
|
|
- [_collectionView reloadData];
|
|
|
-
|
|
|
- ThingsDetailViewController *vc = (ThingsDetailViewController *)[JDFacade facade].currentViewController;
|
|
|
- if (vc) {
|
|
|
- [vc.tableView reloadData];
|
|
|
- }
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
@end
|