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