WIP #340 Refactor getting data and error handling

This commit is contained in:
estevez-dev 2019-03-22 14:04:20 +02:00
parent d29d7e5b3b
commit 4a75243994
2 changed files with 54 additions and 52 deletions

View File

@ -91,6 +91,8 @@ class HomeAssistant {
}*/ }*/
Future fetch() { Future fetch() {
//return _connection().then((_) => _getData());
if ((_fetchCompleter != null) && (!_fetchCompleter.isCompleted)) { if ((_fetchCompleter != null) && (!_fetchCompleter.isCompleted)) {
Logger.w("Previous fetch is not complited"); Logger.w("Previous fetch is not complited");
} else { } else {
@ -208,7 +210,11 @@ class HomeAssistant {
await Future.wait(futures).then((_) { await Future.wait(futures).then((_) {
_createUI(); _createUI();
_completeFetching(null); _completeFetching(null);
}).catchError((e) => _completeFetching(e)); }).catchError((e) {
disconnect().then((_) =>
_completeFetching(e)
);
});
} }
void _completeFetching(error) { void _completeFetching(error) {
@ -256,11 +262,12 @@ class HomeAssistant {
logout(); logout();
_completeConnecting({"errorCode": 62, "errorMessage": "${data["message"]}"}); _completeConnecting({"errorCode": 62, "errorMessage": "${data["message"]}"});
} else if (data["type"] == "result") { } else if (data["type"] == "result") {
Logger.d("[Received] <== id: ${data['id']}, success: ${data['success']}");
if (data["success"]) { if (data["success"]) {
Logger.d("[Received] <== Request id ${data['id']} was successful");
_messageResolver[data["id"]]?.complete(data["result"]); _messageResolver[data["id"]]?.complete(data["result"]);
} else { } else {
_messageResolver[data["id"]]?.completeError(data["error"]); Logger.e("[Received] <== Error received on request id ${data['id']}: ${data['error']}");
_messageResolver[data["id"]]?.completeError(data['error']["message"]);
} }
_messageResolver.remove(data["id"]); _messageResolver.remove(data["id"]);
} else if (data["type"] == "event") { } else if (data["type"] == "event") {
@ -288,69 +295,71 @@ class HomeAssistant {
} }
Future _getConfig() async { Future _getConfig() async {
await _sendSocketMessage(type: "get_config").then((data) { return _sendSocketMessage(type: "get_config").then((data) {
if (data["success"]) { _instanceConfig = Map.from(data);
_instanceConfig = Map.from(data["result"]); }).catchError((e) {
} else { throw {"errorCode": 1, "errorMessage": "Error getting config: $e"};
Logger.w("Couldn't get instance config: ${data["error"].toString()}");
}
}); });
} }
Future _getStates() async { Future _getStates() async {
//TODO last change here. Try run!! return _sendSocketMessage(type: "get_states").then(
return _sendSocketMessage(type: "get_states").then((data) => entities.parse(data)); (data) => entities.parse(data)
).catchError((e) {
throw {"errorCode": 1, "errorMessage": "Error getting states: $e"};
});
} }
Future _getLongLivedToken() async { Future _getLongLivedToken() async {
await _sendSocketMessage(type: "auth/long_lived_access_token", additionalData: {"client_name": "HA Client app ${DateTime.now().millisecondsSinceEpoch}", "lifespan": 365}).then((data) { return _sendSocketMessage(type: "auth/long_lived_access_token", additionalData: {"client_name": "HA Client app ${DateTime.now().millisecondsSinceEpoch}", "lifespan": 365}).then((data) {
if (data['success']) { Logger.d("Got long-lived token.");
Logger.d("Got long-lived token: ${data['result']}"); _token = data;
_token = data['result']; _tempToken = null;
_tempToken = null; final storage = new FlutterSecureStorage();
final storage = new FlutterSecureStorage(); storage.write(key: "hacl_llt", value: _token);
storage.write(key: "hacl_llt", value: _token);
} else {
logout();
Logger.e("Error getting long-lived token: ${data['error'].toString()}");
}
}).catchError((e) { }).catchError((e) {
Logger.e("Error getting long-lived token: ${e.toString()}");
logout(); logout();
throw {"errorCode": 63, "errorMessage": "Authentication error: $e"};
}); });
} }
Future _getLovelace() async { Future _getLovelace() async {
await _sendSocketMessage(type: "lovelace/config").then((data) => _rawLovelaceData = data["result"]); return _sendSocketMessage(type: "lovelace/config").then((data) => _rawLovelaceData = data).catchError((e) {
throw {"errorCode": 1, "errorMessage": "Error getting lovelace config: $e"};
});
} }
Future _getUserInfo() async { Future _getUserInfo() async {
_userName = null; _userName = null;
await _sendSocketMessage(type: "auth/current_user").then((data) => _userName = data["result"]["name"]); return _sendSocketMessage(type: "auth/current_user").then((data) => _userName = data["name"]).catchError((e) {
Logger.w("Can't get user info: ${e}");
});
} }
Future _getServices() async { Future _getServices() async {
await _sendSocketMessage(type: "get_services").then((data) => Logger.d("We actually don`t need the list of servcies for now")); return _sendSocketMessage(type: "get_services").then((data) => Logger.d("Services received")).catchError((e) {
Logger.w("Can't get services: ${e}");
});
} }
Future _getPanels() async { Future _getPanels() async {
panels.clear(); panels.clear();
await _sendSocketMessage(type: "get_panels").then((data) { return _sendSocketMessage(type: "get_panels").then((data) {
if (data["success"]) { data.forEach((k,v) {
data["result"].forEach((k,v) { String title = v['title'] == null ? "${k[0].toUpperCase()}${k.substring(1)}" : "${v['title'][0].toUpperCase()}${v['title'].substring(1)}";
String title = v['title'] == null ? "${k[0].toUpperCase()}${k.substring(1)}" : "${v['title'][0].toUpperCase()}${v['title'].substring(1)}"; panels.add(Panel(
panels.add(Panel( id: k,
id: k, type: v["component_name"],
type: v["component_name"], title: title,
title: title, urlPath: v["url_path"],
urlPath: v["url_path"], config: v["config"],
config: v["config"], icon: v["icon"]
icon: v["icon"] )
) );
); });
}); }).catchError((e) {
} throw {"errorCode": 1, "errorMessage": "Error getting panels list: $e"};
}); });;
} }
_incrementMessageId() { _incrementMessageId() {

View File

@ -307,7 +307,7 @@ class _MainPageState extends State<MainPage> with WidgetsBindingObserver, Ticker
Logger.e(e.toString()); Logger.e(e.toString());
Logger.e("${e.stackTrace}"); Logger.e("${e.stackTrace}");
_showErrorBottomBar( _showErrorBottomBar(
message: "There was some error", message: "Unknown error",
errorCode: 13 errorCode: 13
); );
} else { } else {
@ -528,6 +528,7 @@ class _MainPageState extends State<MainPage> with WidgetsBindingObserver, Ticker
break; break;
} }
case 63:
case 61: { case 61: {
_bottomBarAction = FlatButton( _bottomBarAction = FlatButton(
child: Text("Try again", style: textStyle), child: Text("Try again", style: textStyle),
@ -583,17 +584,9 @@ class _MainPageState extends State<MainPage> with WidgetsBindingObserver, Ticker
} }
setState(() { setState(() {
_bottomBarProgress = false; _bottomBarProgress = false;
_bottomBarText = "$message (code: $errorCode)"; _bottomBarText = "$message";
_showBottomBar = true; _showBottomBar = true;
}); });
/*_scaffoldKey.currentState.hideCurrentSnackBar();
_scaffoldKey.currentState.showSnackBar(
SnackBar(
content: Text("$message (code: $errorCode)"),
action: action,
duration: Duration(hours: 1),
)
);*/
} }
final GlobalKey<ScaffoldState> _scaffoldKey = new GlobalKey<ScaffoldState>(); final GlobalKey<ScaffoldState> _scaffoldKey = new GlobalKey<ScaffoldState>();