[#39] Protocol settings. Saving settings improvement
This commit is contained in:
		| @@ -37,8 +37,8 @@ class HassioDataModel { | |||||||
|     } else { |     } else { | ||||||
|       //Fetch timeout timer |       //Fetch timeout timer | ||||||
|       _fetchingTimer = Timer(Duration(seconds: 10), () { |       _fetchingTimer = Timer(Duration(seconds: 10), () { | ||||||
|         _fetchCompleter.completeError({"message": "Data fetching timeout."}); |  | ||||||
|         closeConnection(); |         closeConnection(); | ||||||
|  |         _fetchCompleter.completeError({"message": "Data fetching timeout."}); | ||||||
|       }); |       }); | ||||||
|       _fetchCompleter = new Completer(); |       _fetchCompleter = new Completer(); | ||||||
|       _reConnectSocket().then((r) { |       _reConnectSocket().then((r) { | ||||||
| @@ -51,11 +51,11 @@ class HassioDataModel { | |||||||
|     return _fetchCompleter.future; |     return _fetchCompleter.future; | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   void closeConnection() { |   closeConnection() { | ||||||
|     if (_hassioChannel != null) { |     if (_hassioChannel?.closeCode == null) { | ||||||
|       _hassioChannel.sink.close(); |       _hassioChannel.sink?.close(); | ||||||
|       _hassioChannel = null; |  | ||||||
|     } |     } | ||||||
|  |     _hassioChannel = null; | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   Future _reConnectSocket() { |   Future _reConnectSocket() { | ||||||
| @@ -64,7 +64,7 @@ class HassioDataModel { | |||||||
|       debugPrint("Socket connecting..."); |       debugPrint("Socket connecting..."); | ||||||
|       _hassioChannel = IOWebSocketChannel.connect(_hassioAPIEndpoint); |       _hassioChannel = IOWebSocketChannel.connect(_hassioAPIEndpoint); | ||||||
|       _hassioChannel.stream.handleError((e) { |       _hassioChannel.stream.handleError((e) { | ||||||
|         debugPrint("Socket error: ${e.toString()}"); |         debugPrint("Unhandled socket error: ${e.toString()}"); | ||||||
|       }); |       }); | ||||||
|       _hassioChannel.stream.listen((message) => |       _hassioChannel.stream.listen((message) => | ||||||
|           _handleMessage(_connectionCompleter, message)); |           _handleMessage(_connectionCompleter, message)); | ||||||
| @@ -93,11 +93,8 @@ class HassioDataModel { | |||||||
|     var data = json.decode(message); |     var data = json.decode(message); | ||||||
|     debugPrint("[Received]Message type: ${data['type']}"); |     debugPrint("[Received]Message type: ${data['type']}"); | ||||||
|     if (data["type"] == "auth_required") { |     if (data["type"] == "auth_required") { | ||||||
|       debugPrint("   sending auth!"); |  | ||||||
|       _sendMessageRaw('{"type": "auth","api_password": "$_hassioPassword"}'); |       _sendMessageRaw('{"type": "auth","api_password": "$_hassioPassword"}'); | ||||||
|     } else if (data["type"] == "auth_ok") { |     } else if (data["type"] == "auth_ok") { | ||||||
|       debugPrint("   auth done"); |  | ||||||
|       debugPrint("Connection done."); |  | ||||||
|       _sendSubscribe(); |       _sendSubscribe(); | ||||||
|       connectionCompleter.complete(); |       connectionCompleter.complete(); | ||||||
|     } else if (data["type"] == "auth_invalid") { |     } else if (data["type"] == "auth_invalid") { | ||||||
|   | |||||||
| @@ -76,7 +76,7 @@ class _MainPageState extends State<MainPage> with WidgetsBindingObserver { | |||||||
|  |  | ||||||
|   _init() async { |   _init() async { | ||||||
|     SharedPreferences prefs = await SharedPreferences.getInstance(); |     SharedPreferences prefs = await SharedPreferences.getInstance(); | ||||||
|     String _hassioAPIEndpoint = "wss://" + |     String _hassioAPIEndpoint = prefs.getString('hassio-protocol')+"://" + | ||||||
|         prefs.getString('hassio-domain') + |         prefs.getString('hassio-domain') + | ||||||
|         ":" + |         ":" + | ||||||
|         prefs.getString('hassio-port') + |         prefs.getString('hassio-port') + | ||||||
| @@ -318,6 +318,7 @@ class _MainPageState extends State<MainPage> with WidgetsBindingObserver { | |||||||
|                 child: Icon( |                 child: Icon( | ||||||
|                     _createMDIfromCode(MaterialDesignIcons.getCustomIconByName("mdi:home-assistant")), |                     _createMDIfromCode(MaterialDesignIcons.getCustomIconByName("mdi:home-assistant")), | ||||||
|                     size: 40.0, |                     size: 40.0, | ||||||
|  |                     color: _dataModelErrorMessage == null ? Colors.blue : Colors.redAccent, | ||||||
|                 ), |                 ), | ||||||
|               ), |               ), | ||||||
|             ] |             ] | ||||||
|   | |||||||
| @@ -13,6 +13,7 @@ class _SettingsPageState extends State<SettingsPage> { | |||||||
|   String _hassioDomain = ""; |   String _hassioDomain = ""; | ||||||
|   String _hassioPort = ""; |   String _hassioPort = ""; | ||||||
|   String _hassioPassword = ""; |   String _hassioPassword = ""; | ||||||
|  |   String _socketProtocol = "wss"; | ||||||
|  |  | ||||||
|   @override |   @override | ||||||
|   void initState() { |   void initState() { | ||||||
| @@ -27,28 +28,22 @@ class _SettingsPageState extends State<SettingsPage> { | |||||||
|       _hassioDomain = prefs.getString("hassio-domain"); |       _hassioDomain = prefs.getString("hassio-domain"); | ||||||
|       _hassioPort = prefs.getString("hassio-port"); |       _hassioPort = prefs.getString("hassio-port"); | ||||||
|       _hassioPassword = prefs.getString("hassio-password"); |       _hassioPassword = prefs.getString("hassio-password"); | ||||||
|  |       _socketProtocol = prefs.getString("hassio-protocol"); | ||||||
|     }); |     }); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   _saveSettings() async { |   _saveSettings() async { | ||||||
|  |     debugPrint("Saving settings...."); | ||||||
|     SharedPreferences prefs = await SharedPreferences.getInstance(); |     SharedPreferences prefs = await SharedPreferences.getInstance(); | ||||||
|  |     prefs.setString("hassio-domain", _hassioDomain); | ||||||
|     setState(() { |     prefs.setString("hassio-port", _hassioPort); | ||||||
|       prefs.setString("hassio-domain", _hassioDomain); |     prefs.setString("hassio-password", _hassioPassword); | ||||||
|       prefs.setString("hassio-port", _hassioPort); |     prefs.setString("hassio-protocol", _socketProtocol); | ||||||
|       prefs.setString("hassio-password", _hassioPassword); |     debugPrint("Done saving settings...."); | ||||||
|       _hassioPassword = prefs.getString('hassio-password'); |  | ||||||
|     }); |  | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   @override |   @override | ||||||
|   Widget build(BuildContext context) { |   Widget build(BuildContext context) { | ||||||
|     // This method is rerun every time setState is called, for instance as done |  | ||||||
|     // by the _incrementCounter method above. |  | ||||||
|     // |  | ||||||
|     // The Flutter framework has been optimized to make rerunning build methods |  | ||||||
|     // fast, so that you can just rebuild anything that needs updating rather |  | ||||||
|     // than having to individually change instances of widgets. |  | ||||||
|     return new Scaffold( |     return new Scaffold( | ||||||
|       appBar: new AppBar( |       appBar: new AppBar( | ||||||
|         leading: IconButton(icon: Icon(Icons.arrow_back), onPressed: (){ |         leading: IconButton(icon: Icon(Icons.arrow_back), onPressed: (){ | ||||||
| @@ -62,6 +57,20 @@ class _SettingsPageState extends State<SettingsPage> { | |||||||
|       body: ListView( |       body: ListView( | ||||||
|         padding: const EdgeInsets.all(20.0), |         padding: const EdgeInsets.all(20.0), | ||||||
|         children: <Widget>[ |         children: <Widget>[ | ||||||
|  |           new Row( | ||||||
|  |             children: [ | ||||||
|  |               Text("HTTPS"), | ||||||
|  |               Switch( | ||||||
|  |                 value: (_socketProtocol == "wss"), | ||||||
|  |                 onChanged: (value) { | ||||||
|  |                   setState(() { | ||||||
|  |                     _socketProtocol = value ? "wss" : "ws"; | ||||||
|  |                   }); | ||||||
|  |                   _saveSettings(); | ||||||
|  |                 }, | ||||||
|  |               ) | ||||||
|  |             ], | ||||||
|  |           ), | ||||||
|           new TextField( |           new TextField( | ||||||
|             decoration: InputDecoration( |             decoration: InputDecoration( | ||||||
|               labelText: "Home Assistant domain or ip address" |               labelText: "Home Assistant domain or ip address" | ||||||
| @@ -71,6 +80,7 @@ class _SettingsPageState extends State<SettingsPage> { | |||||||
|             ), |             ), | ||||||
|             onChanged: (value) { |             onChanged: (value) { | ||||||
|               _hassioDomain = value; |               _hassioDomain = value; | ||||||
|  |               _saveSettings(); | ||||||
|             }, |             }, | ||||||
|           ), |           ), | ||||||
|           new TextField( |           new TextField( | ||||||
| @@ -82,6 +92,7 @@ class _SettingsPageState extends State<SettingsPage> { | |||||||
|             ), |             ), | ||||||
|             onChanged: (value) { |             onChanged: (value) { | ||||||
|               _hassioPort = value; |               _hassioPort = value; | ||||||
|  |               _saveSettings(); | ||||||
|             }, |             }, | ||||||
|           ), |           ), | ||||||
|           new TextField( |           new TextField( | ||||||
| @@ -93,6 +104,7 @@ class _SettingsPageState extends State<SettingsPage> { | |||||||
|             ), |             ), | ||||||
|             onChanged: (value) { |             onChanged: (value) { | ||||||
|               _hassioPassword = value; |               _hassioPassword = value; | ||||||
|  |               _saveSettings(); | ||||||
|             }, |             }, | ||||||
|           ) |           ) | ||||||
|         ], |         ], | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user