Data parsing refactored to properly handle errors

This commit is contained in:
estevez 2018-09-19 00:24:32 +03:00
parent f844d89222
commit e5fbc40c66
3 changed files with 33 additions and 30 deletions

View File

@ -48,8 +48,7 @@ class HassioDataModel {
_reConnectSocket().then((r) { _reConnectSocket().then((r) {
_getData(); _getData();
}).catchError((e) { }).catchError((e) {
_fetchingTimer.cancel(); _finishFetching(e);
_fetchCompleter.completeError(e);
}); });
} }
return _fetchCompleter.future; return _fetchCompleter.future;
@ -114,25 +113,18 @@ class HassioDataModel {
} else if (data["type"] == "auth_invalid") { } else if (data["type"] == "auth_invalid") {
connectionCompleter.completeError({message: "Auth error: ${data["message"]}"}); connectionCompleter.completeError({message: "Auth error: ${data["message"]}"});
} else if (data["type"] == "result") { } else if (data["type"] == "result") {
if (data["success"] == true) {
if (data["id"] == _configMessageId) { if (data["id"] == _configMessageId) {
_parseConfig(data["result"]); _parseConfig(data);
_configCompleter.complete();
} else if (data["id"] == _statesMessageId) { } else if (data["id"] == _statesMessageId) {
_parseEntities(data["result"]); _parseEntities(data);
_statesCompleter.complete();
} else if (data["id"] == _servicesMessageId) { } else if (data["id"] == _servicesMessageId) {
_parseServices(data["result"]); _parseServices(data);
_servicesCompleter.complete();
} else if (data["id"] == _currentMssageId) { } else if (data["id"] == _currentMssageId) {
debugPrint("Request id:$_currentMssageId was successful"); debugPrint("Request id:$_currentMssageId was successful");
} else { } else {
debugPrint("Skipped message due to messageId:"); debugPrint("Skipped message due to messageId:");
debugPrint(message); debugPrint(message);
} }
} else {
_handleErrorMessage(data["error"]);
}
} else if (data["type"] == "event") { } else if (data["type"] == "event") {
if ((data["event"] != null) && (data["event"]["event_type"] == "state_changed")) { if ((data["event"] != null) && (data["event"]["event_type"] == "state_changed")) {
_handleEntityStateChange(data["event"]["data"]); _handleEntityStateChange(data["event"]["data"]);
@ -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() { void _sendSubscribe() {
_incrementMessageId(); _incrementMessageId();
_subscriptionMessageId = _currentMssageId; _subscriptionMessageId = _currentMssageId;
@ -206,10 +192,20 @@ class HassioDataModel {
} }
void _parseConfig(Map data) { 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 = {}; Map result = {};
debugPrint("Parsing ${data.length} Home Assistant service domains"); debugPrint("Parsing ${data.length} Home Assistant service domains");
data.forEach((domain, services){ data.forEach((domain, services){
@ -221,9 +217,15 @@ class HassioDataModel {
}); });
}); });
_servicesData = result; _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"); debugPrint("Parsing ${data.length} Home Assistant entities");
List<String> uiGroups = []; List<String> uiGroups = [];
data.forEach((entity) { data.forEach((entity) {
@ -295,6 +297,7 @@ class HassioDataModel {
_uiStructure[viewId.split(".")[1]] = viewGroupStructure; _uiStructure[viewId.split(".")[1]] = viewGroupStructure;
} }
}); });
_statesCompleter.complete();
} }
callService(String domain, String service, String entity_id) { callService(String domain, String service, String entity_id) {

View File

@ -13,7 +13,7 @@ part 'data_model.dart';
EventBus eventBus = new EventBus(); EventBus eventBus = new EventBus();
const String appName = "HA Client"; const String appName = "HA Client";
const appVersion = "0.0.9-alpha"; const appVersion = "0.0.8";
void main() => runApp(new HassClientApp()); void main() => runApp(new HassClientApp());

View File

@ -446,5 +446,5 @@ packages:
source: hosted source: hosted
version: "2.1.15" version: "2.1.15"
sdks: 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" flutter: ">=0.1.4 <2.0.0"