Resolves #526 Subscribe to Lovelace update events
This commit is contained in:
		| @@ -49,6 +49,7 @@ class HomeAssistant { | ||||
|  | ||||
|   HomeAssistant._internal() { | ||||
|     ConnectionManager().onStateChangeCallback = _handleEntityStateChange; | ||||
|     ConnectionManager().onLovelaceUpdatedCallback = _handleLovelaceUpdate; | ||||
|     DeviceInfoManager().loadDeviceInfo(); | ||||
|   } | ||||
|  | ||||
| @@ -296,6 +297,14 @@ class HomeAssistant { | ||||
|     return completer.future; | ||||
|   } | ||||
|  | ||||
|   void _handleLovelaceUpdate() { | ||||
|     if (_fetchCompleter != null && _fetchCompleter.isCompleted) { | ||||
|       eventBus.fire(new StateChangedEvent( | ||||
|           needToRebuildUI: true | ||||
|       )); | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   void _handleEntityStateChange(Map eventData) { | ||||
|     //TheLogger.debug( "New state for ${eventData['entity_id']}"); | ||||
|     if (_fetchCompleter != null && _fetchCompleter.isCompleted) { | ||||
|   | ||||
| @@ -28,6 +28,7 @@ class ConnectionManager { | ||||
|   bool isConnected = false; | ||||
|  | ||||
|   var onStateChangeCallback; | ||||
|   var onLovelaceUpdatedCallback; | ||||
|  | ||||
|   IOWebSocketChannel _socket; | ||||
|  | ||||
| @@ -150,6 +151,10 @@ class ConnectionManager { | ||||
|                 } else if (data["type"] == "auth_ok") { | ||||
|                   Logger.d("[Received] <== ${data.toString()}"); | ||||
|                   Logger.d("[Connection] Subscribing to events"); | ||||
|                   sendSocketMessage( | ||||
|                     type: "subscribe_events", | ||||
|                     additionalData: {"event_type": "lovelace_updated"}, | ||||
|                   ); | ||||
|                   sendSocketMessage( | ||||
|                     type: "subscribe_events", | ||||
|                     additionalData: {"event_type": "state_changed"}, | ||||
| @@ -212,6 +217,17 @@ class ConnectionManager { | ||||
|       } | ||||
|       _messageResolver.remove("${data["id"]}"); | ||||
|     } else if (data["type"] == "event") { | ||||
|       if (data["event"] != null) { | ||||
|         if (data["event"]["event_type"] == "state_changed") { | ||||
|           Logger.d("[Received] <== ${data['type']}.${data["event"]["event_type"]}: ${data["event"]["data"]["entity_id"]}"); | ||||
|           onStateChangeCallback(data["event"]["data"]); | ||||
|         } else if (data["event"]["event_type"] == "lovelace_updated") { | ||||
|           Logger.d("[Received] <== ${data['type']}.${data["event"]["event_type"]}: $data"); | ||||
|           onLovelaceUpdatedCallback(); | ||||
|         }   | ||||
|       } | ||||
|  | ||||
|  | ||||
|       if ((data["event"] != null) && (data["event"]["event_type"] == "state_changed")) { | ||||
|         Logger.d("[Received] <== ${data['type']}.${data["event"]["event_type"]}: ${data["event"]["data"]["entity_id"]}"); | ||||
|         onStateChangeCallback(data["event"]["data"]); | ||||
|   | ||||
| @@ -153,7 +153,7 @@ class _MainPageState extends State<MainPage> with WidgetsBindingObserver, Ticker | ||||
|     if (_stateSubscription == null) { | ||||
|       _stateSubscription = eventBus.on<StateChangedEvent>().listen((event) { | ||||
|         if (event.needToRebuildUI) { | ||||
|           Logger.d("New entity. Need to rebuild UI"); | ||||
|           Logger.d("Need to rebuild UI"); | ||||
|           _quickLoad(); | ||||
|         } else { | ||||
|           setState(() {}); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user