WIP #340 Refactor getting data and error handling
This commit is contained in:
		| @@ -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