Data parsing refactored to properly handle errors
This commit is contained in:
parent
f844d89222
commit
e5fbc40c66
@ -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,24 +113,17 @@ 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);
|
||||||
_parseConfig(data["result"]);
|
} else if (data["id"] == _statesMessageId) {
|
||||||
_configCompleter.complete();
|
_parseEntities(data);
|
||||||
} else if (data["id"] == _statesMessageId) {
|
} else if (data["id"] == _servicesMessageId) {
|
||||||
_parseEntities(data["result"]);
|
_parseServices(data);
|
||||||
_statesCompleter.complete();
|
} else if (data["id"] == _currentMssageId) {
|
||||||
} else if (data["id"] == _servicesMessageId) {
|
debugPrint("Request id:$_currentMssageId was successful");
|
||||||
_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);
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
_handleErrorMessage(data["error"]);
|
debugPrint("Skipped message due to messageId:");
|
||||||
|
debugPrint(message);
|
||||||
}
|
}
|
||||||
} 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")) {
|
||||||
@ -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) {
|
||||||
|
@ -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());
|
||||||
|
|
||||||
|
@ -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"
|
||||||
|
Reference in New Issue
Block a user