diff --git a/lib/data_model.dart b/lib/data_model.dart index b27c7f2..397d47b 100644 --- a/lib/data_model.dart +++ b/lib/data_model.dart @@ -48,8 +48,7 @@ class HassioDataModel { _reConnectSocket().then((r) { _getData(); }).catchError((e) { - _fetchingTimer.cancel(); - _fetchCompleter.completeError(e); + _finishFetching(e); }); } return _fetchCompleter.future; @@ -114,24 +113,17 @@ class HassioDataModel { } else if (data["type"] == "auth_invalid") { connectionCompleter.completeError({message: "Auth error: ${data["message"]}"}); } else if (data["type"] == "result") { - if (data["success"] == true) { - if (data["id"] == _configMessageId) { - _parseConfig(data["result"]); - _configCompleter.complete(); - } else if (data["id"] == _statesMessageId) { - _parseEntities(data["result"]); - _statesCompleter.complete(); - } else if (data["id"] == _servicesMessageId) { - _parseServices(data["result"]); - _servicesCompleter.complete(); - } else if (data["id"] == _currentMssageId) { - debugPrint("Request id:$_currentMssageId was successful"); - } else { - debugPrint("Skipped message due to messageId:"); - debugPrint(message); - } + if (data["id"] == _configMessageId) { + _parseConfig(data); + } else if (data["id"] == _statesMessageId) { + _parseEntities(data); + } else if (data["id"] == _servicesMessageId) { + _parseServices(data); + } else if (data["id"] == _currentMssageId) { + debugPrint("Request id:$_currentMssageId was successful"); } else { - _handleErrorMessage(data["error"]); + debugPrint("Skipped message due to messageId:"); + debugPrint(message); } } else if (data["type"] == "event") { if ((data["event"] != null) && (data["event"]["event_type"] == "state_changed")) { @@ -147,12 +139,6 @@ class HassioDataModel { } } - _handleErrorMessage(Object error) { - debugPrint("Error: ${error.toString()}"); - if ((_statesCompleter != null) && (!_statesCompleter.isCompleted)) _statesCompleter.completeError(error); - if ((_servicesCompleter != null) && (!_servicesCompleter.isCompleted)) _servicesCompleter.completeError(error); - } - void _sendSubscribe() { _incrementMessageId(); _subscriptionMessageId = _currentMssageId; @@ -206,10 +192,20 @@ class HassioDataModel { } void _parseConfig(Map data) { - _instanceConfig = Map.from(data); + if (data["success"] == true) { + _instanceConfig = Map.from(data["result"]); + _configCompleter.complete(); + } else { + _configCompleter.completeError({"errorCode": 2, "errorMessage": data["error"]["message"]}); + } } - void _parseServices(Map data) { + void _parseServices(response) { + if (response["success"] == false) { + _servicesCompleter.completeError({"errorCode": 4, "errorMessage": response["error"]["message"]}); + return; + } + Map data = response["result"]; Map result = {}; debugPrint("Parsing ${data.length} Home Assistant service domains"); data.forEach((domain, services){ @@ -221,9 +217,15 @@ class HassioDataModel { }); }); _servicesData = result; + _servicesCompleter.complete(); } - void _parseEntities(List data) async { + void _parseEntities(response) async { + if (response["success"] == false) { + _statesCompleter.completeError({"errorCode": 3, "errorMessage": response["error"]["message"]}); + return; + } + List data = response["result"]; debugPrint("Parsing ${data.length} Home Assistant entities"); List uiGroups = []; data.forEach((entity) { @@ -295,6 +297,7 @@ class HassioDataModel { _uiStructure[viewId.split(".")[1]] = viewGroupStructure; } }); + _statesCompleter.complete(); } callService(String domain, String service, String entity_id) { diff --git a/lib/main.dart b/lib/main.dart index e302200..8b18b39 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -13,7 +13,7 @@ part 'data_model.dart'; EventBus eventBus = new EventBus(); const String appName = "HA Client"; -const appVersion = "0.0.9-alpha"; +const appVersion = "0.0.8"; void main() => runApp(new HassClientApp()); diff --git a/pubspec.lock b/pubspec.lock index 762e056..2d42dd7 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -446,5 +446,5 @@ packages: source: hosted version: "2.1.15" sdks: - dart: ">=2.0.0 <=2.1.0-dev.1.0.flutter-ccb16f7282" + dart: ">=2.0.0 <=2.1.0-dev.3.1.flutter-760a9690c2" flutter: ">=0.1.4 <2.0.0"