WIP #340 Refactor getting data and error handling
This commit is contained in:
parent
d29d7e5b3b
commit
4a75243994
@ -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() {
|
||||||
|
@ -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>();
|
||||||
|
Reference in New Issue
Block a user